J'ai défini une interface en c++, c'est à dire une classe ne contenant que des fonctions virtuelles pures.
Je veux interdire explicitement les utilisateurs de l'interface pour supprimer l'objet par l'intermédiaire d'un pointeur vers l'interface, j'ai donc déclaré protégé et non destructeur virtuel pour l'interface, quelque chose comme:
class ITest{
public:
virtual void doSomething() = 0;
protected:
~ITest(){}
};
void someFunction(ITest * test){
test->doSomething(); // ok
// deleting object is not allowed
// delete test;
}
Le compilateur GNU me donne un message d'avertissement disant "classe " ITest' a des fonctions virtuelles, mais non destructeur virtuel".
Une fois le destructeur est protégé, quelle est la différence entre l'avoir virtuel ou non virtuel?
Pensez-vous que cet avertissement peut être ignoré ou passé sous silence?