Scope verlassen -> Destruktorreihenfolge
-
Ich habe folgenden Code:
{ A a(); //objekt a vom typ A B b(); //Objekt b vom typ B }a und b werden beim Verlassen des Scopes zerstört. Gibt es eine definierte Reihenfolge in der sie zerstört werden (die man festlegen kann)?
-
Aufräumen geschieht in umgekehrter Reihenfolge der Erstellung. Diese Regel gilt immer, nicht nur hier bei Verlassen eines Scopes. Dies passiert zum Beispiel auch, wenn der Destruktor eines Klassenobjekts aufgerufen wird, sowohl mit dessen Membern als auch mit eventuellen geerbten Klassen.
Dies gilt sogar bei temporären Objekten, deren Erstellungsreihenfolge nicht weiter definiert ist. Egal welches Objekt später erstellt wird, es ist garantiert, dass es dann zuerst zerstört wird.
-
Destuktoren werden immer in umgekehrter Reihenfolge der Konstruktoren aufgerufen. im lokalen Scope in diesem Beispiel ist die Reihenfolge der Konstruktoren durch die Reihenfolge der Deklarationen festgelegt, deshalb ist auch die Reihenfolge der Destruktoren festgelegt
ctor: a b
dtor: b a
-
Was du da hast, sind keine Objekte, sondern Funktionsdeklarationen. Ich nehme an, du meinst
{ A a; //objekt a vom typ A B b; //Objekt b vom typ B }...ansonsten gilt das von meinen Vorrednern gesagte.
-
seldon schrieb:
Was du da hast, sind keine Objekte, sondern Funktionsdeklarationen. Ich nehme an, du meinst
{ A a; //objekt a vom typ A B b; //Objekt b vom typ B }...ansonsten gilt das von meinen Vorrednern gesagte.
Ups.
Danke.