Free prüft selbst ob die Variable bereits nil ist, dann passiert nichts.
TObject(nil).Free; // läuft problemlos
Das ist falsch. Korrigiert mich bitte, wenn es nach Version Delphi 10.1 anders sein sollte.
Läuft auch unter 10.1 problemlos!
Delphi-Quellcode:
program Project769;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
begin
try
TObject(
nil).Free;
Writeln('
Geht doch');
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
Readln;
end.
"
dann passiert nichts" ist definitiv falsch. Wer macht denn bitteschön
TObject(nil).Free;
?
Delphi-Quellcode:
var
fObject: TMyObj;
begin
fObject := TMyObj.Create;
try
fObject.Trallalla;
finally
fObject.Free;
end;
fObject.Free; //was passiert hier?
end;
Ein Unterschied wäre das hier:
Delphi-Quellcode:
var
fObject: TMyObj;
begin
fObject := TMyObj.Create;
try
fObject.Trallalla;
finally
fObject.Free;
fObject := nil; //Ein kleiner, aber feiner Unterschied
end;
fObject.Free; //dann passiert nichts.
end;