Maison >développement back-end >C++ >Comment les constructeurs et destructeurs de membres sont-ils appelés dans l'héritage et l'agrégation C ?

Comment les constructeurs et destructeurs de membres sont-ils appelés dans l'héritage et l'agrégation C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 08:02:01249parcourir

How are member constructors and destructors called in C   inheritance and aggregation?

Ordre des appels aux constructeurs et aux destructeurs de membres

En C , l'ordre des appels aux constructeurs et aux destructeurs de membres est un aspect fondamental de l'initialisation des objets et destruction. Il garantit une initialisation et un nettoyage appropriés des membres de la classe, en particulier dans les situations impliquant l'héritage et l'agrégation.

Considérez 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::~

Cette sortie démontre que les constructeurs de membres sont appelés dans l'ordre de déclaration et que les destructeurs de membres sont appelés dans l'ordre inverse de déclaration.

Le standard C garantit cet ordre dans les conditions suivantes :

  1. Ordre d'initialisation :Les classes de base directes et les données membres non statiques sont initialisées dans le ordre dans lequel ils apparaissent dans la définition de la classe.
  2. Ordre de destruction : Les destructeurs des classes dérivées et de base sont appelés dans le ordre inverse de l'ordre d'initialisation.

Dans cet exemple, la classe Aggregate contient les membres a de type A, b de type B et c de type C. Lorsque le constructeur Aggregate est appelé, les membres sont initialisés dans l’ordre a, b et c. De manière correspondante, lorsque le destructeur d'agrégat est appelé, les membres sont détruits dans l'ordre inverse, c, b et a.

Comprendre l'ordre des appels du constructeur de membres et du destructeur est crucial pour une gestion correcte de la durée de vie des objets en C , surtout lorsque l'on travaille avec l'héritage et les structures de classes complexes.

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