Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/03/2013, 15:39
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: [C++] Duda con new y delete o delete[]

"... si el puntero va a dejar de ser utilizable despues del delete (por un fin de llave) no es imprescindible que pongas NULL..."

Por un fin de llave:

Es muy recomendable y (creo yo) imprescindible que pongas NULL, de lo contrario no puedes hacer comprovaciones de error y puedes enviar ese puntero a funciones que intenten usarlo por no ser nulo y que revienten la aplicacion. Es practicamente necesario tanto lo de asignar nulo como lo de las comprovaciones de error para solucionar casos de salida inesperada, o error en cargas iniciales, etc, donde sales con una unica funcion que se encarga de finalizar todo lo inicializado (a menos que quieras hacer tantas funciones de salida como posibles errores). Un fin de llave no asegura que ese puntero deje de usarse.

Por un fin de llave y de scope:

Si deja de ser utilizable por fin de llave y de scope entonces no será necesario.

En el caso del ejemplo no es necesario, porque liberas el puntero y sales de la aplicacion. En casos mas complejos el echo de asignar nulos te salva de comentarios tales como "que raro, en casa funcionaba y en la oficina cliente peta el programa". No solo en esos casos, sino incluso es habitual que algunas librerias lleven la macro safe_release cuya implementacion consiste en un condicional que comprueba que no sea nulo y las funciones necesarias de liberacion.

Personalmente creo que es una buena practica no dejar esos cabos sueltos. Para eso incluso el 'new' implementa el modo nothrow para asignar nulo en caso de error y poder hacer todo eso (de lo contrario no tendria sentido).

Saludos
vosk