Maison > développement back-end > C++ > Pourquoi les destructeurs virtuels purs en C doivent-ils être définis, pas seulement déclarés ?

Pourquoi les destructeurs virtuels purs en C doivent-ils être définis, pas seulement déclarés ?

Linda Hamilton
Libérer: 2024-12-15 20:16:16
original
292 Les gens l'ont consulté

Why Must Pure Virtual Destructors in C   Be Defined, Not Just Declared?

Destructeurs virtuels purs en C

En C, il est important d'être attentif au comportement des destructeurs virtuels purs au sein des classes de base abstraites. Bien qu'il puisse sembler intuitif de déclarer un destructeur virtuel pur dans une classe de base, comme indiqué ci-dessous :

class A {
public:
    virtual ~A() = 0;
};
Copier après la connexion

cette approche est incorrecte et peut entraîner des conséquences inattendues.

Contrairement aux attentes, déclarer simplement un destructeur virtuel pur n'est pas suffisant pour une classe de base abstraite. La mise en œuvre du destructeur est également cruciale. Voici comment implémenter correctement un destructeur virtuel pur :

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }
Copier après la connexion

Le destructeur en ligne vide sert d'implémentation par défaut, garantissant que le destructeur peut être appelé sans provoquer de comportement indéfini lors de la destruction des classes dérivées.

Si vous omettez la définition du destructeur, toute tentative de dériver de la classe A et ensuite de supprimer ou de détruire l'objet dérivé invoquera le gestionnaire purecall, ce qui pourrait entraîner un programme. crash.

Par conséquent, lorsque vous travaillez avec des classes de base abstraites en C, n'oubliez pas d'implémenter des destructeurs virtuels purs pour éviter un comportement indéfini et assurer un nettoyage correct des ressources.

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