Maison > développement back-end > C++ > Les classes de base abstraites en C devraient-elles avoir des destructeurs virtuels purs ?

Les classes de base abstraites en C devraient-elles avoir des destructeurs virtuels purs ?

Linda Hamilton
Libérer: 2024-12-28 06:21:17
original
801 Les gens l'ont consulté

Should Abstract Base Classes in C   Have Pure Virtual Destructors?

Destructeurs virtuels purs en C

Dans le monde de la programmation orientée objet, les classes de base abstraites nécessitent souvent des destructeurs virtuels purs. Cependant, des problèmes surviennent lors de l'écriture de code comme celui-ci :

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

Cela soulève la question de savoir s'il est acceptable qu'une classe de base abstraite ait un destructeur purement virtuel. Alors que Microsoft Visual C le compile sans problème, que se passe-t-il au moment de l'exécution ?

La réponse est : comportement non défini. Si une instance d'une classe dérivée de A est supprimée ou détruite, le destructeur de A sera invoqué. Cependant, comme il est purement virtuel et qu’il manque une implémentation, cela déclenche un comportement indéfini. Sur certaines plateformes, cela peut entraîner l'invocation du gestionnaire purecall, entraînant un crash.

Pour éviter cela, il est crucial d'implémenter également le destructeur. Une implémentation minimale comme celle-ci devrait suffire :

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

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

De cette façon, lorsque les instances de classes dérivées sont supprimées, le destructeur de A ne provoquera pas de comportement indéfini.

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