Hola, me gustaría saber bien cómo destruir objetos pues aunque si no lo hago el programa funciona sin errores no me gusta ir dejando memoria sin liberar.
Yo usaba siempre Destroy para destruir objetos pero en
otro hilo y en este
otro de este foro me recomendaron destruir con Free aquellos objetos que no fueran hilos.
Hace poco
pregunté cómo saber si un objeto estaba creado y ahí me recomendaron usar FreeAndNil(Objeto); para destruir el objeto.
Y la duda que tengo es, si tenemos un objeto con varios atributos cuyos tipos son otros objetos, yo tengo dos opciones de destruir:
1) Desde dentro de la clase del objeto:
Código Delphi
[-]
destructor MiClase.Destroy;
begin
FreeAndNil(Atributo1);
FreeAndNil(Atributo2);
FreeAndNil(Atributo3);
FreeAndNil(Atributo4);
end;
2) Desde fuera de la clase del objeto (en otra clase que use a la anterior):
Código Delphi
[-]
FreeAndNil(MiObjetoCompuesto);
En el segundo caso no implemento el método destroy en la clase MiClase y sólo llamo a FreeAndNil desde la clase externa.
¿Qué opción es la correcta? ¿Serían las dos opciones equivalentes?
Otra cosa, ¿Delphi no destruye todos los objetos creados al cerrar la aplicación?
Saludos.