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
Je n'arrive pas à supprimer correctement mon tableaux d'animaux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
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).
Je vous remercie pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 o_Animal = new Lion(); delete o_Animal;
Partager