Maison > développement back-end > C++ > Quel est l'ordre des appels de constructeur et de destructeur dans l'héritage C ?

Quel est l'ordre des appels de constructeur et de destructeur dans l'héritage C ?

Mary-Kate Olsen
Libérer: 2025-01-05 20:15:43
original
963 Les gens l'ont consulté

What's the Order of Constructor and Destructor Calls in C   Inheritance?

Ordre des appels de constructeur et de destructeur dans l'héritage

Lors de la définition des classes héritées, il est crucial de comprendre les séquences dans lesquelles les constructeurs et les destructeurs sont invoqués . Prenons l'exemple suivant :

struct A {
    A() { cout << "A() C-tor" << endl; }
    ~A() { cout << "~A() D-tor" << endl; }
};

struct B : public A {
    B() { cout << "B() C-tor" << endl; }
    ~B() { cout << "~B() D-tor" << endl; }

    A a;
};
Copier après la connexion

Ordre de construction :

  1. Constructeur de classe de base : Le constructeur de la classe de base (A ) initialise la partie de base de l'objet dérivé.
  2. Construction du champ membre : Puisque B a un champ de type A, son constructeur appellera le constructeur de ce champ.
  3. Constructeur de classe dérivée : Enfin, le constructeur de la classe dérivée (B) termine l'initialisation de l'objet.

Ainsi, l'ordre de construction est :

  • A()
  • A(a)
  • B()

Ordre de destruction :

Les destructeurs sont invoqués dans l'ordre inverse de construction :

  1. Destructeur de classe dérivée : Le destructeur de la classe dérivée (B) démarre le processus de nettoyage.
  2. Destruction du champ membre : Le champ de type A(a) est détruit.
  3. Classe de base Destructeur :Enfin, le destructeur de la classe de base (A) achève la destruction.

L'ordre de destruction est :

  • ~B()
  • ~A(a)
  • ~A()

Liste d'initialisation :

Même si aucune liste d'initialisation explicite n'est définie en B, une liste d'initialisation par défaut est automatiquement générée par le compilateur. Cette liste initialise la classe de base (A) et le champ membre (a) à l'aide de leurs constructeurs par défaut.

En conclusion, l'ordre des appels de constructeur et de destructeur en héritage suit des règles spécifiques : les constructeurs initialisent d'abord les classes de base, puis les champs membres, et enfin la classe dérivée. Les destructeurs invoquent le processus de nettoyage dans l'ordre inverse. Comprendre ces règles est essentiel pour écrire du code robuste lors de l'utilisation de l'héritage.

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