Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Pregunta tonta sobre TStringList y liberar recursos (https://www.clubdelphi.com/foros/showthread.php?t=49729)

blueicaro 28-10-2007 18:52:32

Pregunta tonta sobre TStringList y liberar recursos
 
Hola si yo escribo lo siguiente:

Código Delphi [-]
Procedure TMiForm.MiProcedure();
Var  
  MiTStringList := TStringList; 
Begin  
  MiStringList := TStringList.Create; 
  {...}
End;

Al entrar en la rutina se crea el StringList, ¿pero cuando se sale de la rutina, se liberan los recursos?, o ¿debería colocar al final MiStringList.Free?

Saludos
/BlueIcaro

poliburro 28-10-2007 18:56:39

no es pregunta tonta, mi amigo,

y bueno, si no liberas la memoria que ocupas creando objetos por tu cuenta, está no será liberada en automático.

Lo ideal es que ocupes el método free.

Suerte

dec 28-10-2007 19:21:00

Hola,

Si no estoy equivocado, y, tal como planteas el asunto, la variable sería liberada al salir del procedimiento, puesto que se trata de una variable local que no tiene vida más allá del mismo. Sin embargo, lo normal es liberar aquellos recursos que ocupemos, e incluso ir más allá, es decir, asegurarnos de que los liberamos, por ejemplo:

Código Delphi [-]
procedure Foo();
var
  t: TStrings;  
begin
  // Creamos
  t := TStringList.Create();
  try
    // Trabajamos y...
  finally
    // Liberamos
    t.Free();
  end;
end;

De este modo, aun en caso de excepción, nos aseguramos de que la variable "t" es creada, usada y liberada antes de salir del procedimiento.

seoane 28-10-2007 19:59:44

Cita:

Empezado por dec (Mensaje 241827)
Si no estoy equivocado, y, tal como planteas el asunto, la variable sería liberada al salir del procedimiento, puesto que se trata de una variable local que no tiene vida más allá del mismo

Pues si que lo estas :p:D

La variable MiStringList no es mas que un puntero. El objeto se crea (TStringList.Create) y su posición en memoria se guarda dentro de la variable MiStringList. Es verdad que la variable MiStringList se destruye al salir del procedimiento, pero el objeto al que apunta sigue tan tranquilo en memoria.

dec 28-10-2007 20:33:28

Hola,

Muy buen apunte Domingo. A ver si no se me olvida. Muchas gracias. :)

PD. Maldita sea, me he vuelto a equivocar... :D :D

dec 28-10-2007 20:39:47

Hola,

Por otro lado... debí suponerlo (je, je, je, je), porque, ¿para qué sino la insistencia en liberar el objeto? No sería necesario, si no fuera necesario... :D :D :D

PD. Esto lo escribo para no olvidarme. :D

seoane 28-10-2007 20:59:41

Cita:

Empezado por dec (Mensaje 241838)
No sería necesario, si no fuera necesario... :D :D :D

:D Esa frase es perfecta ...

dec 28-10-2007 21:46:44

Hola,

Cita:

Empezado por Domingo
:D Esa frase es perfecta ...

Por un momento entendí ferpecta, me has asustao. :)


La franja horaria es GMT +2. Ahora son las 14:14:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi