De toute façon vu ton code, s'ils sont égaux tu aura un beau crash.
Puisque ton desctructeur ~C delete attr1 et attr2.
D'ailleurs attr2 n'est pas non plus initialisé à NULL, tu vas donc faire du jardinage en mémoire.
En fait ton code me semble bourré d'erreurs qui le rendent difficile à suivre.
genre
Code :
- C::C(A var)
- {this->attr1=new C(var1);
- }
|
je suppose que tu veux dire
Code :
- C::C(A var)
- {this->attr1=new A(var);
- ...
- }
|
mais du coup rien d'étonnant si C1.attr1 est != de C2.attr1 puisque tu affectes en fait des copies de a1 et pas a1 lui même, et en plus tu passes par valeur donc des copies et pas ton pointeur !!
Toutefois si tu veux partager le pointeur il faut alors ne plus le libérer dans ton destructeur (sinon crash) mais le gérer à l'extérieur de ta classe C.
Une autre solution envisageable serait d'utiliser un smart pointeur
Une correction possible (mais attention, je ne suis pas sur que ça soit une bonne idée, dépend du contexte)
Code :
- C::C(A *pvar)
- {
- attr1= pvar;
- attr2 = NULL;
- }
- C::~C()
- {
- //delete attr1; // non car ton instance est partagée !
- //delete attr2; // ? peut etre non plus si tu fonctionne comme pour attr1
- }
|
Message édité par Malkav le 26-04-2013 à 16:49:10
---------------
Mes feedbacks * Ma galerie photo