вы имеете в виду в более эффективном C++ информация относится к объектам, которые содержат несколько другого объекта, так как в этом случае:
class Foo {
private:
Bar bar_1;
Bar bar_2;
public:
Foo() : bar_1(), bar_2() {}
};
В приведенном выше примере, вы будете иметь bar_1 построен первый , а затем bar_2. Когда объект класса Foo затем уничтожается, сначала начинается уничтожение bar_2
, затем bar_1
. Об этом говорит Скотт Мейерс.
С точки зрения класса, массив баров будет другим объектом, который должен уничтожить компилятор, поэтому порядок разрушения влияет на то, когда массив разрушается в контексте других объектов в классе.
Что касается того, каким образом элементы массива будут уничтожены, я бы не удивился, если это зависит от реализации. У вас также будет оптимизация, играющая здесь роль (например, массив POD можно уничтожить, просто освободив его память, а также объект, который состоит исключительно из POD). Все вышеперечисленное может повлиять на порядок, в котором элементы массива будут уничтожены.
Мне было бы интересно узнать, почему вам нужно знать порядок, в котором элементы массива уничтожаются (кроме технического любопытства, которое было бы веской причиной ИМХО). Если это потому, что есть зависимости между элементами массива, я думаю, что структура данных может потребоваться пересмотреть.
все они построены с конструкторами по умолчанию, и любой порядок построения/разрушения будет выполняться ». Поскольку конструктор no-arg может обращаться к глобальным переменным (например, по статике классов), он имеет значение для результирующего массива, поэтому я не совсем уверен, что вы подразумеваете под «любым приказом» - только один заказ соответствует стандарту 12.6. Стандарт мог бы сказать, что порядок был определен по реализации или мог бы сказать, что они построены в обратном порядке числа различных простых факторов в индексе со связями, определяемыми цифрой суммы в базе 7 ;-) –