Probablement la raison réelle que virtuelle pure destructeurs sont autorisés que pour les interdire consisterait à ajouter une autre règle de la langue et il n'y a pas besoin de cette règle puisqu'aucun mauvais effets peuvent venir que de permettre une pure destructeur virtuel.
Nope, le bon vieux virtuel est suffisant dans la plupart (tous?) cas.
Si vous créez un objet avec des implémentations par défaut pour ses méthodes virtuelles et que vous voulez faire à un niveau abstrait, sans forcer quelqu'un pour remplacer toute spécifique de la méthode, vous pouvez faire le destructeur virtuelle pure. Je ne vois pas beaucoup de point, mais c'est possible.
On peut aussi supposer que chaque dérivant de la classe aurait probablement besoin d'spécifiques de nettoyage de code et d'utiliser le destructeur virtuel pur comme un rappel à l'écrire, mais cela semble artificiel.
Remarque: Le destructeur est la seule méthode qui, même si elle est virtuelle pure est d'avoir une mise en œuvre pour que la classe est défini pour être utile (oui fonctions virtuelles pures peuvent avoir des implémentations).
struct foo {
virtual void bar() = 0;
};
void foo::bar() { /* default implementation */ }
class foof : public foo {
void bar() { foo::bar(); } // have to explicitly call default implementation.
};