Ver Mensaje Individual
  #14  
Antiguo 12-11-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola!

Cita:
Empezado por donald shimoda Ver Mensaje
...Freeandnil solo hace

Código Delphi [-]
if Assigned(x) then
  x.free;
Es decir valida que solo libera cuando esta creado. Es codigo seguro...
Disculpa que te corrija Donald, pero eso no es lo que hace FreeAndNil. Linett ha dado una explicación más cierta; la variable objeto queda con un valor en blanco (Nil) tras su liberación con FreeAndNil. Es el propio método Free el que hace una validación de seguridad antes de llamar al destructor Destroy.

Como ya se dijo, es normal utilizar FreeAndNil con variables globales, y aunque también puede ser aplicado a variables locales, por lo general sólo utilizamos Free con éstas. En otras palabras, el uso de FreeAndNil se justifica cuando existe la posibilidad de que alguna parte del código intente hacer algo con la instancia de objeto apuntada por la variable después de haberse destruido dicha instancia.

Por otro lado, la solución propuesta por Linett al principio me parece la más adecuada. Cuando mucho haría falta una llamada al método Clear antes del primer Add.

Un abrazo sin destruir.

Al González.

Última edición por Al González fecha: 12-11-2008 a las 17:51:17.
Responder Con Cita