Maison >développement back-end >C++ >Comment l'ordre d'initialisation et de destruction des objets membres dans les agrégats C est-il déterminé ?
Ordre d'initialisation et de destruction des membres en C
En C, l'ordre dans lequel les objets membres sont initialisés et détruits est crucial pour comprendre le comportement de structures de données complexes. Considérons le programme suivant :
#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; }
Ce programme crée une instance d'une structure agrégée qui contient trois autres structures, A, B et C. Lorsque nous exécutons ce programme, le résultat suivant est produit :
A::A B::B C::C C::~ B::~ A::~
Cette sortie soulève la question : cet ordre de construction et de destruction est-il garanti par le standard C ?
La réponse est oui. Selon la norme C (12.6.2), les membres d'une structure agrégée sont initialisés et détruits dans l'ordre suivant :
Ordre d'initialisation :
Ordre de destruction :
Par conséquent, pour le programme donné, l'ordre de construction et de destruction des membres est garanti comme étant :
Ceci garantit un comportement cohérent lors de la création et de la destruction de structures de données complexes en C .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!