Здравствуйте, 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;...)
{
...
}
Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов.
J>Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов.
гм. Понятно. Но порядок конструкторов может и поменять, что приведёт к изменению порядка деструкторов, но он всё равно останется обратным порядку вызова конструкторов. Так?
Здравствуйте, Tom, Вы писали:
J>>Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов. Tom>гм. Понятно. Но порядок конструкторов может и поменять, что приведёт к изменению порядка деструкторов, но он всё равно останется обратным порядку вызова конструкторов. Так?
так, но какая разница, если, как я говорил выше, разницы никакой быть не должно — это необходимое условие?
Здравствуйте, Tom, Вы писали:
J>>Деструкторы всегда вызываются в порядке, обратном порядку вызова конструкторов. Tom>гм. Понятно. Но порядок конструкторов может и поменять, что приведёт к изменению порядка деструкторов, но он всё равно останется обратным порядку вызова конструкторов. Так?
Порядок вызова конструкторов тот же что и порядок объявлений — порядок в списке инициализации конструктора значения не имеет. В остальных случаях вызов конструктора собственно объявлением и задаётся, за исключением временных объектов в вызове функции, для которых порядок не определён.