En C , l'ordre d'initialisation et de destruction des membres de la classe joue un rôle crucial dans la gestion de la durée de vie des objets. Ce comportement est communément appelé « ordre d'appel du constructeur et du destructeur ».
Ordre d'initialisation des membres
La norme C spécifie que les variables membres sont initialisées dans l'ordre dans lequel elles sont déclarés dans la définition de la classe. Cet ordre garantit que les classes de base sont initialisées avant les classes dérivées et que les données membres non statiques sont initialisées dans l'ordre dans lequel elles apparaissent.
Ordre de destruction des membres
L'ordre inverse s'applique à la destruction des membres. Les destructeurs sont appelés dans l'ordre inverse de l'initialisation, les destructeurs de classes dérivées étant appelés avant les destructeurs de classes de base et les destructeurs de données membres non statiques appelés dans l'ordre inverse de leur déclaration.
Exemple
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; }
Une fois exécuté, ce programme produit le résultat suivant :
A::A B::B C::C C::~ B::~ A::~
Comme prévu, les membres d'Aggregate sont initialisés dans l'ordre A , B, puis C, et leurs destructeurs sont appelés dans l'ordre inverse.
Par conséquent, oui, C garantit que les membres sont initialisés dans l'ordre de déclaration et détruits dans l'ordre inverse pour les membres de la classe et les types d'agrégats.
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!