Maison  >  Article  >  développement back-end  >  Quel est l’ordre des appels aux constructeurs et aux destructeurs de membres en C ?

Quel est l’ordre des appels aux constructeurs et aux destructeurs de membres en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 03:33:02548parcourir

What is the order of member constructor and destructor calls in C  ?

Ordre des appels aux constructeurs et aux destructeurs de membres : spécification A C

En C, l'ordre d'initialisation et de destruction des membres de la classe est crucial pour la gestion durée de vie des objets et allocation de mémoire de manière efficace. Cet article met en lumière les spécificités de ce processus, tel que défini par le standard du langage C.

Considérez l'extrait de code suivant :

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;
}

Lorsque ce code s'exécute, le constructeur et le destructeur appellent se produira dans un ordre spécifique.

Ordre d'initialisation des membres :

Conformément à la section 12.6.2 de la norme C 14 :

  • Données statiques les membres sont initialisés en premier, dans l'ordre de déclaration.
  • Les données membres non statiques sont ensuite initialisées, également dans l'ordre de déclaration. Ici, le membre a est initialisé en premier, suivi de b puis de c.

Par conséquent, le résultat attendu pour l'initialisation du membre est :

A::A
B::B
C::C

Ordre de destruction des membres :

L'ordre de destruction des membres est l'inverse de l'initialisation :

  • Les données membres non statiques sont détruites dans l'ordre inverse de la déclaration.
  • Statique les membres de données sont détruits en dernier.

Le résultat attendu pour la destruction des membres est donc :

C::~
B::~
A::~

Cela confirme que C garantit l'ordre de construction et de destruction des membres tel que spécifié dans la norme . Les membres sont initialisés dans l'ordre de déclaration et détruits dans l'ordre de déclaration inverse, garantissant ainsi une gestion appropriée de la mémoire et un cycle de vie des objets. Comprendre ces règles est essentiel pour écrire du code C efficace et correct.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn