(en supposant que obj2
est censé être obj1
)
ClassA *x
définit un pointeur qui peuvent pointer vers des objets de type ClassA
. Un pointeur n'est pas un objet lui-même. Alloue (et construit) un objet réel de type ClassA
. Par conséquent, la ligne Class A *obj1 = new ClassA;
définit un pointeur obj1
, puis le définit pour pointer vers un objet nouvellement alloué de type ClassA
.
La ligne Class A *ptr1 = obj1;
définit un pointeur ptr1
et définit ensuite pour pointer vers la même chose obj1
pointe vers, qui est l'objet ClassA
que nous venons de créer.
Après la ligne Class A *ptr2 = obj1;
, nous avons trois pointeurs (obj1
, ptr1
, ptr2
) pointent tous vers le même objet.
Si nous faisons delete ptr1;
(ou de manière équivalente, delete obj1;
ou delete ptr2;
), nous détruisons l'objet pointé. Après cela, tout pointeur qui pointait vers l'objet est rendu invalide (ce qui répond à votre première question: oui, cela affectera ptr2
dans le sens où ptr2
ne pointera pas vers un objet valide par la suite).
La bonne solution dépend de ce que vous essayez d'atteindre:
- Si vous voulez deux copies de l'objet, en supposant
ClassA
a un constructeur de copie, faire ClassA *ptr2 = new ClassA(*obj1);
. Vous aurez besoin de delete
ce nouvel objet séparément lorsque vous avez terminé avec!
- Si vous souhaitez deux pointeurs vers le même objet, envisagez d'utiliser quelque chose comme
boost::shared_ptr
(google)
Hmm, c'est beaucoup de texte si simple q + a. Et bien.
Je suppose que 'obj2' est supposé être' obj1'? Dans tous les cas, la solution est [arrêter la gestion manuelle de la mémoire] (http: // stackoverflow.com/questions/3681455/quoi-est-la-philosophie-de-gestion-mémoire-en-c/3681471 # 3681471). – GManNickG