Heim >Backend-Entwicklung >C++ >Wie garantiert der C-Standard die Reihenfolge der Member-Konstruktor- und Destruktor-Aufrufe in einer Klasse mit Member-Variablen anderer Klassen?
Problem:
In C, wenn eine Klasse Mitgliedsvariablen anderer enthält Bei Klassen ist die Reihenfolge ihrer Initialisierung und Zerstörung entscheidend. Betrachten Sie das folgende Programm:
#include <iostream> using namespace std; struct A { A() { cout << "A::A" << endl; } ~A() { cout << "A::~" << endl; } }; struct B { B() { cout << "B::B" << endl; } ~B() { cout << "B::~" << endl; } }; struct C { C() { cout << "C::C" << endl; } ~C() { cout << "C::~" << endl; } }; struct Aggregate { A a; B b; C c; }; int main() { Aggregate a; return 0; }
Unter dem C-Standard ist garantiert, dass dieses Programm immer die folgende Ausgabe erzeugt:
A::A B::B C::C C::~ B::~ A::~
Antwort:
Ja, das ist garantiert.
Gemäß Abschnitt 12.6.2 des C-Standards folgen die Initialisierung und Zerstörung von Mitgliedern innerhalb einer Klasse bestimmten Regeln:
In der In diesem Beispiel werden die Mitglieder der Aggregate-Struktur in der Reihenfolge a, b und c deklariert. Daher ist gewährleistet, dass sie in der Reihenfolge A::A, B::B und C::C initialisiert und in der umgekehrten Reihenfolge C::~, B::~ und A::~ zerstört werden.
Das obige ist der detaillierte Inhalt vonWie garantiert der C-Standard die Reihenfolge der Member-Konstruktor- und Destruktor-Aufrufe in einer Klasse mit Member-Variablen anderer Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!