http://c.developpez.com/faq/cpp/?pag...tructeur_copie
Tu réinitialises ton objet (si j'ai bien compris) en effectuant une copie d'un nouveau:
this->myIPB = *(new IPB(_a, _b));
ça peut se décomposer ainsi:
1 2 3 4
|
IPB temp( _a, _b );
this->myIPB = temp;
// destruction de temp |
Note que je passe par un objet alloué sur la pile, et non par un new, car il faut un delete...
si tu n'a pas de constructeur spécial pour la copie, this->myIPB devient une copie conforme de temp. Problème : si temp possède un pointeur pObject, tu obtiens 2 objets IPB (temp et myIPB) qui pointent vers le même pObject. Et lorsque temp est détruit, temp.pObject est (normalement) libéré, du coup le pointeur pObject de myIPB pointe vers n'importe quoi. Le plantage est assuré.
Le constructeur par recopie va se charger de dupliquer pObject.
Mais dans ton cas je ne suis pas sûr que ce soit la cause, vu que tu passes par une allocation dynamique, qui n'est pas libérée. Tu as donc une fuite de mémoire.
Moi je te propose de revoir ton code et de créer une fonction Reste() par exemple, ou de modifier Init ainsi:
1 2 3 4 5 6 7 8
|
IPB::IPB(bool _a, bool _b) {
this->Init( _a, _b );
}
int Functions::Init(bool _a, bool _b) {
return this->myIPB.Init( _a, _b );
} |
Je viens juste de voir ton commentaire ">>>erreur ici", ça me conforte dans l'idée du pblm de recopie.
Partager