Maison > développement back-end > C++ > En C, comment les membres du groupe sont-ils initialisés et détruits ?

En C, comment les membres du groupe sont-ils initialisés et détruits ?

Mary-Kate Olsen
Libérer: 2024-11-08 10:02:02
original
229 Les gens l'ont consulté

In C  , How are Class Members Initialized and Destroyed?

Ordre d'initialisation et de destruction des membres de la classe

En C , l'ordre d'initialisation et de destruction des membres de la classe joue un rôle crucial dans la gestion de la durée de vie des objets. Ce comportement est communément appelé « ordre d'appel du constructeur et du destructeur ».

Ordre d'initialisation des membres

La norme C spécifie que les variables membres sont initialisées dans l'ordre dans lequel elles sont déclarés dans la définition de la classe. Cet ordre garantit que les classes de base sont initialisées avant les classes dérivées et que les données membres non statiques sont initialisées dans l'ordre dans lequel elles apparaissent.

Ordre de destruction des membres

L'ordre inverse s'applique à la destruction des membres. Les destructeurs sont appelés dans l'ordre inverse de l'initialisation, les destructeurs de classes dérivées étant appelés avant les destructeurs de classes de base et les destructeurs de données membres non statiques appelés dans l'ordre inverse de leur déclaration.

Exemple

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

Une fois exécuté, ce programme produit le résultat suivant :

A::A
B::B
C::C
C::~
B::~
A::~
Copier après la connexion

Comme prévu, les membres d'Aggregate sont initialisés dans l'ordre A , B, puis C, et leurs destructeurs sont appelés dans l'ordre inverse.

Par conséquent, oui, C garantit que les membres sont initialisés dans l'ordre de déclaration et détruits dans l'ordre inverse pour les membres de la classe et les types d'agrégats.

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