Maison > développement back-end > C++ > Quel est l'ordre de construction et de destruction dans l'héritage C ?

Quel est l'ordre de construction et de destruction dans l'héritage C ?

DDD
Libérer: 2024-11-29 12:04:11
original
756 Les gens l'ont consulté

What's the Order of Construction and Destruction in C   Inheritance?

Ordre de construction et de destruction dans l'héritage

Considérez la hiérarchie de classes suivante :

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

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

    A a;
};
Copier après la connexion

Lorsqu'une instance de B est créé (comme dans int main() { B b; }), l'ordre de construction et de destruction suit des règles :

Ordre de construction :

  1. Constructeur de classe de base : Le constructeur de la classe de base (A) est appelé en premier.
  2. Construction des champs membres : Les champs membres de la classe dérivée (B) sont construits dans l'ordre dans lequel ils sont déclarés. Dans ce cas, l'instance a de la classe A est construite.
  3. Constructeur de classe dérivée : Enfin, le constructeur de la classe dérivée (B) est appelé.

Cela se traduit par l'appel suivant ordre :

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

Ordre de destruction :

  1. Destructeur de classe dérivé : Le destructeur de la classe dérivée (B) est appelée en premier.
  2. Destruction des champs membres : Les champs membres de la classe dérivée sont détruits dans l'ordre inverse de leur construction. Dans ce cas, l'instance a de la classe A est détruite.
  3. Destructeur de classe de base : Enfin, le destructeur de la classe de base (A) est appelé.

Cela entraîne la destruction suivante ordre :

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

Par conséquent, l'ordre de construction commence par la classe de base, passe aux champs membres et se termine par la classe dérivée. L'ordre de destruction est l'inverse de l'ordre de construction.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal