Polymorphisme et destructeur (je crois)
Bonjour,
C'est sans doute un problème récurrent sur ce forum et je m'en excuse (ma recherche n'a rien donnée, même sur Google - A noter OC n'est pas accessible en ce moment).
J'ai résumé mon problème dans ce code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <vector>
#include <string>
#include <iostream>
using namespace std;
class Animal {
protected:
string m_s_Nom;
Animal(string i_s_Nom) {m_s_Nom=i_s_Nom;};
public:
~Animal() {cout << "Mort animal : " << m_s_Nom << endl;};
};
class Lion : public Animal {
public:
Lion() : Animal("Lion") {};
~Lion() {cout << "Le lion est mort" << endl;};
};
class Vache : public Animal {
public:
Vache() : Animal("Vache") {};
~Vache() {cout << "La vache est morte" << endl;};
};
int main(int /*argc*/, char** /*argv*/) {
Lion *o_Lion;
Vache *o_Vache;
vector<Animal*> t_Animaux;
o_Lion = new Lion();
o_Vache = new Vache();
delete o_Lion;
delete o_Vache;
t_Animaux.push_back( new Lion() );
t_Animaux.push_back( new Vache() );
for (int i=0;i<t_Animaux.size();i++) {
delete t_Animaux.back(); // Pb on ne passe par le destructueur de Lion / vache ?!?
t_Animaux.pop_back();
}
} |
Je n'arrive pas à supprimer correctement mon tableaux d'animaux.
Le programme ne passe que par le code de la classe Animal sans passer par le destructeur de la classe Lion ou Vache.
Je peux le comprendre vu que c'est un tableau d' "Animal" (la classe sinon, j'aurais écrit animaux) mais pour ce genre de chose était un des principes du polymorphisme (si c'est le bon terme).
Comment faire pour détruire un tableau d'objet polymorphe ?
De même avec le code ci-dessous, je passe dans le destructeur d'Animal mais pas dans celle du "Lion" (ce qui est dans la logique de la suppression du tableau).
Code:
1 2
| o_Animal = new Lion();
delete o_Animal; |
Je vous remercie pour votre aide.