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 :
Rassurez-moi, ceci est faux ? On peut bien faire :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é
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part vector<A*> Tab;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager