Cita:
Empezado por gerardus
Hay trucos, como por ejemplo después de escribir MiObjeto := TMiObjeto.Create, escribes directamente MiObjeto.Free, y entre las dos lineas escribes el código.
|
Hay que matizar un poco este truco. Si ponemos simplemente:
Código Delphi
[-]
Objeto := TMiObjeto.Create;
/*
Código
*/
Objeto.Free;
corremos el riesgo de pérdida de memoria. Siempre hay que proteger el códig para asegurarno que el objeto se libera ante cualquier eventualidad:
Código Delphi
[-]
Objeto := TMiObjeto.Create;
try
/*
Código
*/
finally
Objeto.Free;
end;
Esto garantiza que, aún en el caso de que ocurra un excepción en el código, el objeto se libera adecuadamente.
En cuanto a lo de objetos creados localmente dentro de un procedimiento, es lo mismo que con los demás objetos. Debe liberarse antes de salir del procedimiento. A diferencia de otras variables, los objetos locales no se guardan en el
stack, de manera que la memoria que ocupan no se libera en automático.
// Saludos