Maison >développement back-end >C++ >Pourquoi les destructeurs virtuels purs en C doivent-ils être définis, pas seulement déclarés ?
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; };
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() { }
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!