Исключения из порядка уничтожения для временных объектов? - PullRequest
22 голосов
/ 22 марта 2011

Чтение пункта 1.9 / 14 черновика C ++ 0x.Там я нахожу:

Каждое вычисление значения и побочный эффект, связанный с полным выражением, секвенируются перед каждым вычислением значения и побочным эффектом, связанным со следующим полным выражением, которое будет оценено. 8)

А в сноске 8 написано

8) Как указано в 12.2, после оценки полного выражения выполняется последовательность из нуля или более вызовов функций деструктора для временных объектов. обычно в порядке, обратном построению каждого временного объекта.

Что означает «обычно»?Я думал, что обратный порядок уничтожения был правилом.

Ответы [ 2 ]

23 голосов
/ 22 марта 2011

Я предполагаю, что они имеют в виду любые временные ссылки, связанные с ссылками. Срок действия временного объекта увеличивается до срока действия эталона, в то время как другие временные объекты все еще могут быть уничтожены.

3 голосов
/ 22 марта 2011

Наряду с ответом Марка Б (что весьма неплохо) есть еще одна ситуация: если вы создаете временный объект типа, доступ к которому осуществляется через прямой итератор, объекты (очевидно, достаточно) создаются в порядке, поддерживаемом итератором, итакже уничтожается в том же порядке (не в обратном порядке - потому что итератор не поддерживает это).Я точно не помню, но мне кажется, что я вспоминаю то же самое (или, по крайней мере, допустимо), даже если рассматриваемый контейнер будет поддерживать обратную итерацию (поэтому рассматриваемый код может игнорировать контейнер /тип итератора, предположительно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...