2012-12-04 5 views
3

Juste une petite question:Ai-je besoin de supprimer un pointeur si je ne lui ai pas affecté une nouvelle valeur?

Ai-je besoin de supprimer un pointeur si je ne lui ai pas affecté une nouvelle valeur?

Ce que je l'ai fait si créé un pointeur, puis remis une référence à quelque chose comme ceci:

Planet *planetPointer; 

planetPointer = &earth; 

Ai-je besoin de supprimer ce pointeur ou puis-je mettre juste à null?

+6

Seulement "supprimer" ce que vous "nouveau". – chris

+3

Pour être un peu plus pédant que @chris: La règle est que pour * chaque * nouveau vous devriez avoir un delete à * un * point, et pour chaque nouveau [] vous devriez avoir un delete [] à un moment donné. –

+0

Dupliquer - http://stackoverflow.com/questions/12513426/what-happens-when-delete-pointer-to-stack-object?lq=1 – user93353

Répondre

8

Vous n'avez pas besoin de le supprimer, et, en outre, vous ne devez pas le supprimer. Si earth est un objet automatique, il sera automatiquement libéré. Donc, en supprimant manuellement un pointeur, vous entrez dans un comportement indéfini.

Seulement delete ce que vous allouez avec new.

+1

Pour le dire autrement: Si vous n'avez pas 'new' l'objet, vous ne le faites pas N'en avez pas la propriété (à moins que la documentation pertinente n'en dispose autrement), et si vous n'en avez pas la propriété, vous ne devez pas la libérer. – cdhowie

+0

Encore pire, en un sens, est quand 'earth' est une référence à un objet alloué dynamiquement. En supposant que l'autre auteur était un bon citoyen, cet objet terrestre sera finalement libéré par la chose qui l'a attribué. Supprimez-le ici et le programme échouera lors de cette suppression ultérieure. La raison pour laquelle cela est plus méchant est parce que le message d'erreur fait apparaître que l'erreur est à la deuxième suppression. L'auteur du code allocation de la terre recevra inévitablement un méchant appel téléphonique ou un courriel disant: «Votre code est cassé! –

Questions connexes