Die Informationen, die Sie sich beziehen sind in effektiver C++ auf Objekte angewendet wird, die ein paar anderen Objekt enthalten, wie in diesem Fall:
class Foo {
private:
Bar bar_1;
Bar bar_2;
public:
Foo() : bar_1(), bar_2() {}
};
Im obigen Beispiel, haben Sie bar_1 zuerst konstruiert , gefolgt von bar_2. Wenn ein Objekt der Klasse Foo dann zerstört wird, wird bar_2
zuerst zerstört, dann bar_1
. Darauf bezieht sich Scott Meyers.
Aus der Sicht der Klasse wäre ein Array von Balken ein anderes Objekt, das der Compiler zerstören muss, so dass die Reihenfolge der Zerstörung beeinflusst wird, wenn das Array im Kontext der anderen Objekte in der Klasse zerstört wird.
Wie zu welcher Reihenfolge die Elemente eines Arrays zerstört werden, würde ich nicht zu wundern, wenn die Umsetzung abhängig ist. Hier spielt auch die Optimierung eine Rolle (zum Beispiel kann ein POD-Array einfach dadurch zerstört werden, dass es seinen Speicher freigibt, wie es ein Objekt sein kann, das ausschließlich aus PODs besteht). All dies kann die Reihenfolge beeinflussen, in der die Elemente eines Arrays zerstört werden.
würde ich interessieren zu sehen, warum Sie den Auftrag tun müssen wissen, in dem die Array-Elemente zerstört werden (abgesehen von technischen Neugier, das ein triftiger Grund IMHO wäre). Wenn zwischen den Elementen des Arrays Abhängigkeiten bestehen, muss die Datenstruktur möglicherweise überprüft werden.
Sie sind alle mit den Standardkonstruktoren konstruiert und jede Reihenfolge der Konstruktion/Destruktion würde tun. "Da ein No-Arg-Konstruktor auf Globals zugreifen kann (zB Klassenstatik), macht es für das resultierende Array einen Unterschied, in welcher Reihenfolge sie stehen." Ich bin nicht ganz sicher, was Sie mit "jeder Auftrag würde tun" bedeuten - nur eine Bestellung entspricht 12.6 des Standards. Der Standard könnte gesagt haben, dass die Reihenfolge implementation-defined war, oder hätte sagen können, dass sie konstruiert sind in umgekehrter Reihenfolge der Anzahl der unterschiedlichen Primfaktoren im Index, wobei die Bindungen durch die Ziffernsumme in der Basis 7 bestimmt werden ;-) –