2010-10-01 22 views
3

Possible en double:
Why doesn't delete set the pointer to NULL?Pourquoi l'opérateur de suppression C++ ne définit pas de pointeur sur NULL?

Y at-il un but pour pointeur vers la mémoire désallouée?

+0

Exact duplicate of [Pourquoi ne pas supprimer définir le pointeur sur NULL?] (Http://stackoverflow.com/questions/704466/why-doesnt-delete-set-the-pointer-to-null) –

+0

Oups . Je n'ai pas vu ça. – Vanuan

+0

Voir aussi http://stackoverflow.com/questions/1931126/is-it-good-practice-to-null-a-pointer-after-deleting-it –

Répondre

1

Non, il n'y a pas de réelle utilité pour le laisser fixé à la valeur d'origine, autre que de montrer comment les gens sont incompétents à l'écriture de code :-)

Il suit les traditions de C en ce que vous êtes censé savoir que fais tu. Le coût de la mise à zéro des pointeurs libérés par le compilateur a été jugé trop élevé dans les jours C et cela a été reporté sur C++ avec delete. Si vous codez correctement, le fait que le compilateur définisse le pointeur sur NULL est un gaspillage, puisque vous le définissez sur autre chose ou ne l'utilisez pas à nouveau.

Si vous vraiment voulez rendre votre code plus sûr, vous feriez quelque chose comme (en C):

void myFree (void **pMem) { 
    free (**pMem); 
    *pMem = NULL; 
} 
myFree (&x); 

au lieu de simplement:

free (x); 

Mais, si vous Je vais aller à ce niveau (et introduire une telle abomination), il suffit de passer à Java et d'en finir avec, alors vous n'avez plus à vous soucier de la gestion manuelle de la mémoire.

+0

Ou utilisez des pointeurs intelligents. :) – GManNickG

6

C++ fait exactement ce que vous lui dites de faire. Vous n'avez pas défini le pointeur sur null, vous avez supprimé la mémoire vers laquelle pointe le pointeur. Pourquoi ne gaspillez-vous pas l'étape supplémentaire de la mettre à null (pour des raisons de performance), si vous n'avez pas besoin de le faire?

5

Que faire si c'est un pointeur const?