Bonjour à tous,

J'ai une class qui possède un pointeur vers un objet. Celui-ci peut ou pas être initialisé durant l'utilisation de la classe:

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
 
class MaClass
{
public:
   MaClass();
   ~MaClass();
private:
   MaClass2* m_oMonObjet;
}
 
MaClass::MaClass()
: oMonObjet(NULL)
{
 
}
 
MaClass::~MaClass()
{
   if(m_oMonObjet)
   {
      delete m_oMonObjet;
      oMonObjet = NULL;
   }
}
Le soucis, c'est que j'instancie MaClass et je positionne l'instance dans un Vector (push_back). Celui-ci fait une recopie de l'objet et supprime l'original. Par conséquent, le destructeur de MaClass est appelé deux fois. Comme il a détruit m_oMonObjet une première fois, l'instance dans le vector est alors inutilisable.

C'est normal, je connais comment le Vector fonctionne mais par contre, comment faire? Est-ce qu'il faut plutôt faire un vector de pointeur? Faire des pointeurs intelligent? Redéfinir le constructeur par recopie?

Merci beaucoup,

A bientôt