Maison > développement back-end > C++ > Faut-il définir des destructeurs virtuels purs en C ?

Faut-il définir des destructeurs virtuels purs en C ?

Linda Hamilton
Libérer: 2024-12-16 17:46:10
original
195 Les gens l'ont consulté

Should Pure Virtual Destructors in C   Be Defined?

Définir des destructeurs virtuels purs en C : dévoiler les pièges

Le concept de destructeurs virtuels purs en C soulève des questions importantes concernant la mise en œuvre correcte de classes de base abstraites. Considérez l'extrait de code suivant :

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

La question se pose de savoir si cette approche est appropriée pour définir une classe de base abstraite. Bien qu'il se compile avec succès dans MSVC, il existe des inquiétudes quant au fait que cela puisse entraîner des plantages d'exécution.

Dévoilement du problème

Le problème vient du manque d'implémentation pour le virtuel pur. destructeur. Lorsque des classes dérivées sont créées à partir de A, leurs destructeurs finiront par invoquer le destructeur de A. Cependant, comme le destructeur de A est pur, l'appel entraînera un comportement indéfini.

Résoudre l'écueil

Pour éviter ce crash d'exécution, il est essentiel d'implémenter le destructeur dans la classe de base elle-même. Une simple implémentation en ligne, comme indiqué ci-dessous, suffira :

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

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

Cette implémentation garantit que lorsqu'une classe dérivée est supprimée ou détruite, le destructeur de A sera appelé et le programme se comportera comme prévu.

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