suppression d'un pointeur sur un objet dans un vector
Bonjour,
J'ai bien lu la FAQ sur les vector, j'ai aussi lu ici que
Citation:
This effectively reduces the vector size by the number of elements removed, calling each element's destructor before.
mais 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 ?
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 :
Code:
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 ca affiche :
Citation:
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
Et là, on voit qu'il détruit les objets à la fin du programme, et pas lors du erase, ce que je souhaite.