Warum ist die Reihenfolge der Zerstörung für Datenmitglieder wichtig?

7

Ich sehe in einigen Büchern, dass die Reihenfolge der Zerstörung von Datenmitgliedern in der Klasse in der umgekehrten Reihenfolge ihrer Reihenfolge sein sollte. Was ist der Grund für diese Regel? Alle Beispiele sind willkommen.

    
Thomson 15.01.2011, 02:42
quelle

3 Antworten

12

Dies ist größtenteils aus Gründen der Konsistenz. Wenn mehrere Objekte nacheinander erstellt werden, werden sie immer in umgekehrter Reihenfolge zerstört. Betrachten Sie beispielsweise das folgende Beispiel mit automatischen Variablen:

%Vor%

Hier verwendet b a . Indem garantiert wird, dass Objekte in umgekehrter Reihenfolge ihrer Konstruktion zerstört werden, erleichtert C ++ die Objektlebensdauerverwaltung viel .

In einer Klasse können Sie einen Verweis auf ein Datenelement übergeben, wenn Sie ein anderes Datenelement initialisieren. Wenn Sie sicherstellen, dass Objekte in umgekehrter Reihenfolge zerstört werden, erhalten Sie dasselbe Verhalten wie bei automatischen Variablen:

%Vor%

Beachten Sie, dass es normalerweise keine gute Idee ist, Datenelemente aufeinander zu beziehen, aber es ist sowohl möglich als auch gelegentlich nützlich.

    
James McNellis 15.01.2011, 02:47
quelle
5

Ich denke, vielleicht haben Sie missverstanden. Es ist nicht so, dass Mitglieder sollten in dieser Reihenfolge zerstört werden, sondern angegeben werden .

In seltenen Fällen kann es wichtig sein, die Reihenfolge zu kennen, in der Gegenstände zerstört werden.

Auf jeden Fall ist das die Reihenfolge, in der Objekte zerstört werden, du kannst nichts dagegen tun, aber wisse, dass es passiert.

    
Crazy Eddie 15.01.2011 02:48
quelle
2

Lebenszeiten in C ++ sind so weit wie möglich geschachtelt. Es ist möglich, wenn auch in der Regel selten, dass Datenmitglieder direkt aufeinander angewiesen sind (z. B. einen Zeiger auf einen anderen übergeben) oder indirekt (z. B. beide hängen von einem globalen, wie Schreiben von Ausgaben an stderr ab), aber selbst wenn sie es nicht tun. t, es ist schön, eine bestimmte Reihenfolge zu haben, und die Verschachtelung passt besser zur Funktionsweise des Rests der Sprache (z. B. Lebensdauern bei Funktionsumfang) als andere Ordnungen.

Nach der "Als-ob" -Regel des Standards kann natürlich, wenn der Compiler / die Implementierung den Benutzercode bestimmen kann, die Neuordnung der Zerstörung nicht beobachtet werden, dann kann es tun, was es will.

    
Fred Nurk 15.01.2011 04:21
quelle

Tags und Links