Порядок вызова деструкторов
От: Tom Россия http://www.RSDN.ru
Дата: 15.02.05 17:12
Оценка:
Имеем функцию в которой обьявлены обьекты:

[ccode]
Foo f1;
Foo f2;
Foo f3;
[ccode]

Гарантирует ли стандарт, что вызов конструкторов и деструкторов будет таким же как и расположение обьявления обьектов в коде?
Народная мудрось
всем все никому ничего(с).
Re: Порядок вызова деструкторов
От: Дайвер  
Дата: 15.02.05 17:28
Оценка:
конструктор -> f1, f2, f3
деструктор -> f3, f2, f1
Дайвер
Re: Порядок вызова деструкторов
От: jazzer Россия Skype: enerjazzer
Дата: 15.02.05 17:42
Оценка: +1
Здравствуйте, Tom, Вы писали:

Tom>Имеем функцию в которой обьявлены обьекты:


Tom>
Tom>Foo f1;
Tom>Foo f2;
Tom>Foo f3;
Tom>


Tom>Гарантирует ли стандарт, что вызов конструкторов и деструкторов будет таким же как и расположение обьявления обьектов в коде?


Если порядок их вызова не важен (т.е. всегда получается один и тот же результат), может и переставить или вообще пустить одновременно на разных процессорах.

Простейший пример — вынос константы из цикла:
for (Foo f1 = 1;...)
{
   const Foo f2 = 2;
   ...
}
станет
const Foo f2 = 2;
for (Foo f1 = 1;...)
{
   ...
}


Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Порядок вызова деструкторов
От: Tom Россия http://www.RSDN.ru
Дата: 15.02.05 17:51
Оценка:
J>Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов.
гм. Понятно. Но порядок конструкторов может и поменять, что приведёт к изменению порядка деструкторов, но он всё равно останется обратным порядку вызова конструкторов. Так?
Народная мудрось
всем все никому ничего(с).
Re[3]: Порядок вызова деструкторов
От: jazzer Россия Skype: enerjazzer
Дата: 15.02.05 17:58
Оценка:
Здравствуйте, Tom, Вы писали:

J>>Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов.

Tom>гм. Понятно. Но порядок конструкторов может и поменять, что приведёт к изменению порядка деструкторов, но он всё равно останется обратным порядку вызова конструкторов. Так?

так, но какая разница, если, как я говорил выше, разницы никакой быть не должно — это необходимое условие?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: Порядок вызова деструкторов
От: Tom Россия http://www.RSDN.ru
Дата: 15.02.05 18:12
Оценка:
J>так, но какая разница, если, как я говорил выше, разницы никакой быть не должно — это необходимое условие?

Разница есть если важен порядок вызова деструкторов, а конструктор скажем тривиальный или пустой.
Народная мудрось
всем все никому ничего(с).
Re[3]: Порядок вызова деструкторов
От: dm7  
Дата: 15.02.05 20:14
Оценка:
Здравствуйте, Tom, Вы писали:

J>>Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов.

Tom>гм. Понятно. Но порядок конструкторов может и поменять, что приведёт к изменению порядка деструкторов, но он всё равно останется обратным порядку вызова конструкторов. Так?

Порядок вызова конструкторов тот же что и порядок объявлений — порядок в списке инициализации конструктора значения не имеет. В остальных случаях вызов конструктора собственно объявлением и задаётся, за исключением временных объектов в вызове функции, для которых порядок не определён.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.