Ce n'est pas feu le CUJ qui a été cité, mais Herb Sutter. On retrouve donc cette phrase dans le GOTW et dans son Coding Standards. L'auteur, la maison d'édition, et le titre du bouquin vont faire que cette "règle" risque de s'imposer.
Sinon, je parlais bien d'un destructeur protégé (et non-virtuel). Le fait qu'il n'ait aucune fonction virtuelle dans sa classe mère non instanciable me fait dire que :
- soit il part sur une classe agglomérat de données et autres fonctions qui sert de base à la définition d'autres classes (réutilisation de code) ; je ne vois pas de manipulation polymorphique des données
- soit il part pour faire des dynamic_cast dans tous les sens ; là il faut bien le destructeur virtuel, mais le design sens le moisi.
Il est vrai qu'il pourrait y avoir des cas intermédiaires, mais j'ai plus supposé que le design n'était pas moisi et de la première catégorie. Du coup, l'intérêt du destructeur public est vite faible. Mais bon.
Dans tous les cas seule la présence d'une fonction membre virtuelle-pure garantit la non-instanciabilité.
EDIT: grosse bétise dans le dernier paragraphe.
Partager