Dire que j'ai deux classes de base,Le destructeur d'une classe de base que vous n'utiliserez pas pour supprimer un objet, doit-il être virtuel?
struct A {};
struct B {};
et un dérivé qui utilise l'héritage multiple
struct D : A, B {};
Si mon scénario d'utilisation va quelque chose comme ceci:
A *obj = new D;
-à-dire Je n'utiliserai jamais la classe de base B
pour faire référence à l'objet dérivé, dois-je rendre le destructeur des deux bases virtuel? Je déclare actuellement le destructeur de B
comme protected
pour interdire à d'autres utilisateurs de le faire, mais est-ce suffisant? Le destructeur de D
?
Non, mais vous devriez. –
Si vous ne faites jamais référence à 'D' en tant que' B' vous pourriez être intéressé par l'héritage ['protected' ou' private'.] (Http://stackoverflow.com/questions/860339/difference-between -private-public-and-protected-inheritance) – jaggedSpire
Pour citer le puissant Scott Meyers: * ... déclare un destructeur virtuel dans une classe si et seulement si cette classe contient au moins une fonction virtuelle *. –