Ver Mensaje Individual
  #7  
Antiguo 22-07-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Totalmente seguro

El metodo free esta implementado asi (o muy similar, sacando los IFDEF segun la plataforma)

Código Delphi [-]
procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;

Esto es totalmente seguro, jamas te va a dar error:

Código Delphi [-]
var
  Obj: TObject;
begin
  Obj := nil;
  while True do
    Obj.Free; 
end;

Ahora, el problema es que el destructor no deja la instancia "limpia" (no asigna nil cuando termina, no deja la memoria en 0000)

Esto si te eleva una excepcion AcessViolation:

Código Delphi [-]
var
  Obj: TObject;
begin
  Obj := TObject.Create;
  Obj.Free; // todo bien
  Obj.Free; // AccessViolation
end;
Responder Con Cita