Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-08 03:33:02
original
544 Les gens l'ont consulté

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;
}
Copier après la connexion

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
Copier après la connexion

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::~
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!