Maison > Article > développement back-end > Comment le standard C garantit-il l'ordre des appels de constructeur et de destructeur de membres dans une classe avec des variables membres d'autres classes ?
Problème :
En C, lorsqu'une classe contient des variables membres d'autres classes, l’ordre de leur initialisation et de leur destruction est crucial. 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; }
Sous la norme C, est-il garanti que ce programme produira toujours le résultat suivant :
A::A B::B C::C C::~ B::~ A::~
Réponse :
Oui, c'est garanti.
Selon rubrique 12.6.2 du standard C, l'initialisation et la destruction des membres au sein d'une classe suivent des règles spécifiques :
Dans l'exemple fourni, les membres de la structure Aggregate sont déclarés dans l'ordre a, b et c. Par conséquent, il est garanti qu'ils seront initialisés dans l'ordre A::A, B::B et C::C et détruits dans l'ordre inverse C::~, B::~ et A::~.
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!