Je trouve que cela n'aide guère car dans mon expérience, lorsque les gens accèdent à une allocation de mémoire libérée, c'est presque toujours parce qu'ils ont un autre pointeur quelque part. Et puis cela entre en conflit avec une autre norme de codage personnelle qui est "Évitez l'encombrement inutile", donc je ne le fais pas car je pense que cela aide rarement et rend le code un peu moins lisible.
Cependant - je ne définirai pas la variable sur null si le pointeur n'est pas censé être utilisé à nouveau, mais souvent la conception de niveau supérieur me donne une raison de le définir sur null de toute façon. Par exemple, si le pointeur est un membre d'une classe et que j'ai supprimé ce qu'il pointe, le "contrat" si vous aimez la classe est que ce membre pointera vers quelque chose de valide à tout moment, il doit donc être défini sur null pour cette raison. Une petite distinction mais je pense que c'est important.
En C ++, il est important de toujours penser à qui possède ces données lorsque vous allouez de la mémoire (à moins que vous n'utilisiez des pointeurs intelligents, mais même dans ce cas, une réflexion est nécessaire). Et ce processus a tendance à conduire à ce que les pointeurs soient généralement membres d'une classe et que vous voulez généralement qu'une classe soit dans un état valide à tout moment, et le moyen le plus simple de le faire est de définir la variable membre sur NULL pour indiquer qu'elle pointe à rien maintenant.
Un modèle courant consiste à définir tous les pointeurs membres sur NULL dans le constructeur et à faire supprimer l'appel du destructeur sur tous les pointeurs vers les données que votre conception indique que la classe possède . Clairement, dans ce cas, vous devez définir le pointeur sur NULL lorsque vous supprimez quelque chose pour indiquer que vous ne possédez aucune donnée auparavant.
Donc, pour résumer, oui, je règle souvent le pointeur sur NULL après avoir supprimé quelque chose, mais c'est dans le cadre d'une conception plus large et de réflexions sur le propriétaire des données plutôt que de suivre aveuglément une règle standard de codage. Je ne le ferais pas dans votre exemple car je pense qu'il n'y a aucun avantage à le faire et cela ajoute du «fouillis» qui, d'après mon expérience, est tout aussi responsable des bogues et du mauvais code que ce genre de chose.
ptr == NULL
avant d'en faire quoi que ce soit. Si vous n'annulez pas vos pointeurs gratuits, vous obtiendrez unptr != NULL
pointeur inutilisable.