Creo que esto es de poca ayuda, ya que, según mi experiencia, cuando las personas acceden a una asignación de memoria liberada, casi siempre es porque tienen otro puntero en alguna parte. Y luego entra en conflicto con otro estándar de codificación personal que es "Evitar el desorden inútil", por lo que no lo hago, ya que creo que rara vez ayuda y hace que el código sea un poco menos legible.
Sin embargo, no estableceré la variable en nulo si se supone que el puntero no se usará nuevamente, pero a menudo el diseño de nivel superior me da una razón para establecerlo en nulo de todos modos. Por ejemplo, si el puntero es miembro de una clase y he eliminado lo que señala, entonces el "contrato" si lo desea de la clase es que ese miembro señalará algo válido en cualquier momento, por lo que debe establecerse en nulo por esta razón. Una pequeña distinción pero creo importante.
En c ++ es importante estar siempre pensando quién es el dueño estos datos cuando asigna algo de memoria (a menos que esté utilizando punteros inteligentes, pero aun así es necesario pensarlo). Y este proceso tiende a conducir a que los punteros generalmente sean miembros de alguna clase y, en general, desea que una clase esté en un estado válido en todo momento, y la forma más fácil de hacerlo es establecer la variable miembro en NULL para indicar que apunta a nada ahora.
Un patrón común es establecer todos los punteros miembros en NULL en el constructor y hacer que la llamada destructor elimine en cualquier puntero a los datos que su diseño dice que posee la clase . Claramente, en este caso, debe establecer el puntero en NULL cuando elimina algo para indicar que no posee ningún dato antes.
Para resumir, sí, a menudo configuro el puntero en NULL después de eliminar algo, pero es como parte de un diseño más amplio y reflexiona sobre quién posee los datos en lugar de seguir ciegamente una regla estándar de codificación. No lo haría en su ejemplo, ya que creo que no hay ningún beneficio en hacerlo y agrega "desorden", que en mi experiencia es tan responsable de los errores y el mal código como este tipo de cosas.
ptr == NULL
antes de hacer algo con él. Si no anula sus punteros gratuitos, obtendrá unptr != NULL
puntero inutilizable.