Подтвердить что ты не робот

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

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

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

И в сноске 8 говорится

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

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

4b9b3361

Ответ 1

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

Ответ 2

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