Ver Mensaje Individual
  #5  
Antiguo 03-12-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por gerardus Ver Mensaje
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
Responder Con Cita