Home > Article > Backend Development > How is the initialization and destruction order of member objects in C aggregates determined?
Member Initialization and Destruction Order in C
In C , the order in which member objects are initialized and destructed is crucial for understanding the behavior of complex data structures. Let's consider the following program:
#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; }
This program creates an instance of an aggregate struct that contains three other structs, A, B, and C. When we execute this program, the following output is produced:
A::A B::B C::C C::~ B::~ A::~
This output raises the question: is this order of construction and destruction guaranteed by the C standard?
The answer is yes. According to the C standard (12.6.2), members of an aggregate struct are initialized and destructed in the following order:
Initialization Order:
Destruction Order:
Therefore, for the given program, the order of member construction and destruction is guaranteed to be:
This guarantees consistent behavior when creating and destroying complex data structures in C .
The above is the detailed content of How is the initialization and destruction order of member objects in C aggregates determined?. For more information, please follow other related articles on the PHP Chinese website!