"Pure virtual function called" et destructeur virtuel
Bonjour,
en vue d'éradiquer un petit problème de "Pure virtual function called" à l'exécution d'un programme, j'ai mis ça dans un moteur de recherche bien connu, et je suis tombé sur une info qui m'étonne un peu :
Citation:
le destructeur des classe filles appellent naturellement le destructeur de la classe mère. le problème c'est qu'avec un Mere* pointant vers une instance de Fille, l'appel du destructeur (par delete) se contente par défaut d'appeler le destructeur de Mere (normal). il faut donc rajouter le mécanisme d'indirection virtuel pour que ça soit le destructeur du type réel de l'objet pointé qui soit appelé
Rassurez-moi, ceci est faux ? On peut bien faire :
Code:
1 2 3 4 5 6 7 8 9 10 11
| class A
{
A(){}
virtual ~A(){}
};
class B : public A
{
B(): A(){}
virtual ~B(){}
}; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| void NettoyerTab()
{
int i =0, imax = Tab.size();
for(i = 0; i < imax; ++i)
{
if(Tab[i]) != NULL)
{
delete ( Tab[i] );
}
}
Tab.clear();
} |
Mon problème s'arrange en fait traquant les fonctions virtuelles pures dans les constructeurs et destructeurs.
Je ne pense pas qu'il soit nécessaire de transtyper pour bien deleter, même dans le cas cité.
Merci d'avance pour cette précision.