Bonjour,

J'ai bien lu la FAQ sur les vector, j'ai aussi lu ici que
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 : 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 ca affiche :
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.