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; Obj.Free; end;