égalité des pointeurs - C++ - Programmation
Marsh Posté le 20-04-2013 à 17:49:15
Doublon avec http://www.developpez.net/forums/d [...] -instance/
...
Marsh Posté le 21-04-2013 à 10:00:25
Citation : Comment corriger mon code pour que c1.a1 et C2.a2 pointent sur la meme instance a1? |
En réfléchissant à ce que fait new dans la ligne this->attr1=new A1(a1);
Alors que manifestement, c'est quelque chose de la forme this->attr1 = &a1; que vous désirez faire.
A+,
Marsh Posté le 26-04-2013 à 16:44:31
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 :
|
je suppose que tu veux dire
Code :
|
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 :
|
Marsh Posté le 26-04-2013 à 20:13:31
Exactement, c que je voudrais avoir. En fait, mon but est le partager d'un objet de type C1.
Cette méthode :
Citation : C::C(A *pvar) |
lève l'exception suivante : Debug Assertion failed Block_type_IS_VALID(p_Head_nBlockUse)
Marsh Posté le 20-04-2013 à 12:16:37
Bonjour,
Si j'ai une classe mère C qui possède un attribut pointeur vers une classe A. La classe C a deux classes filles C1 et C2 et aussi la classe A a deux classe filles A1 et A2
C.cpp
class C1
Dans le main:
A1 a1("rr",2);
C1 c1(a1);
C2 c2(a1);
le test d'egalité suivant c1.attr1=c2.attr1 est négatif. En fait, c1.attr1 et c2.attr1 n'ont pas la meme adresse mémoire donc ils ne sont pas égaux.
Comment corriger mon code pour que c1.a1 et C2.a2 pointent sur la meme instance a1?
Merci d'avance.