Bonjour,
J'ai bien lu la FAQ sur les vector, j'ai aussi lu ici quemais mon problème c'est surtout : Est-ce que le erase détruit bien l'objet, et si non quand dois-je le détruire ?This effectively reduces the vector size by the number of elements removed, calling each element's destructor before.
Je viens d'essayer avant, et c'est la cata (ca me parait logique).
Je n'ai pas essayé après pour le moment, car j'affiche le contenu de mon itérateur et il n'est plus le même après le erase :
Et ca affiche :
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 bool GUI_Container::Remove (std::string Name) { //Un itérateur std::vector<GUI_Container*>::iterator i; //Qui passe par tous les enfants de mon conteneur for (i=m_childs.begin();i<m_childs.end();i++) { //Si on trouve le bon enfant if ((*i)->m_name == Name) { std::cout<<"Avant :"<<(*i)<<std::endl; //On supprime du vecteur le pointeur sur l'enfant m_childs.erase(i); std::cout<<"Après :"<<(*i)<<std::endl; //Puis on sort return (true); } } //Enfant non trouvé return (false); }
Et là, on voit qu'il détruit les objets à la fin du programme, et pas lors du erase, ce que je souhaite.Construction du conteneur Root
Construction du conteneur a
Construction du conteneur b
Root contient : 0
Ajout de a
Root contient : 1
Ajout de b
Root contient : 2
On retire a
Avant :0x22fc40
Erase ici
Après :0x22fc10
Root contient : 1
On retire b
Avant :0x22fc10
Erase ici
Après :0x22fc10
Root contient : 0
Destruction du conteneur b
Destruction du conteneur a
Destruction du conteneur Root
Partager