Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1655 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  égalité des pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

égalité des pointeurs

n°2186734
kochfet
Posté le 20-04-2013 à 12:16:37  profilanswer
 

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

Code :
  1. class C
  2. {
  3. A* attr1;
  4. A* attr2;
  5. C(A,A);
  6. ~();
  7. }


C.cpp

Code :
  1. C::C(A var)
  2. {this->attr1=new C(var1);
  3. C::~C(){delete attr1;
  4. delete attr2;}


class C1

Code :
  1. class C1
  2. {
  3. C1(A1 a1)
  4. {this->attr1=new A1(a1);   }
  5. }


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.

mood
Publicité
Posté le 20-04-2013 à 12:16:37  profilanswer
 

n°2186758
Ehon
Posté le 20-04-2013 à 17:49:15  profilanswer
 
n°2186782
gilou
Modérateur
Modzilla
Posté le 21-04-2013 à 10:00:25  profilanswer
 

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+,


Message édité par gilou le 21-04-2013 à 10:11:16

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2187743
Malkav
Posté le 26-04-2013 à 16:44:31  profilanswer
 

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 :
  1. C::C(A var)
  2. {this->attr1=new C(var1);
  3. }


 
je suppose que tu veux dire

Code :
  1. C::C(A var)
  2. {this->attr1=new A(var);
  3. ...
  4. }


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 :
  1. C::C(A *pvar)
  2. {
  3.      attr1= pvar;
  4.      attr2 = NULL;
  5. }
  6. C::~C()
  7. {
  8. //delete attr1; // non car ton instance est partagée !
  9. //delete attr2; // ? peut etre non plus si tu fonctionne comme pour attr1
  10. }


Message édité par Malkav le 26-04-2013 à 16:49:10

---------------
Mes feedbacks * Ma galerie photo
n°2187767
kochfet
Posté le 26-04-2013 à 20:13:31  profilanswer
 

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)
    {
         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
    }


 
lève l'exception suivante : Debug Assertion failed Block_type_IS_VALID(p_Head_nBlockUse)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  égalité des pointeurs

 

Sujets relatifs
[C] [Résolu] Tetris -> SDL ? Réseaux ?Probleme : Tableau de pointeurs sur structure
Les pointeurs : je deviens chèvre !!Problème de pointeurs
Conversion d'un code à base de pointeurs[C] Tri par insertion simple & pointeurs de dates
[C] pointeurs de pointeurs [RESOLU]Affectation illicite de pointeurs en assembleur
[C] soustraire deux pointeurségalité de deux doubles
Plus de sujets relatifs à : égalité des pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR