FreeAndNil() überprüft nicht, aber Free macht dies. Und Free wird aufgerufen. Somit lässt sich's Hansa's abschliessendes Codestück durch einen einzigen FreeAndNil() Aufruf ersetzen, der gleiches macht.
FreeAndNil():
Delphi-Quellcode:
procedure FreeAndNil(var Obj);
var
P: TObject;
begin
P := TObject(Obj);
TObject(Obj) := nil; // clear the reference before destroying the object
P.Free;
end;
Free Methode:
Delphi-Quellcode:
procedure TObject.Free;
asm
TEST EAX,EAX
// If not Assigned Then
JE @@exit
// goto exit
MOV ECX,[EAX]
// get virtual methode table
MOV
DL,1
CALL dword ptr [ECX].vmtDestroy
// call actual Destroy methode implementation for the instance
@@exit:
end;
Einer von den Geeks hier im Forum könnte uns mal aufklären, warum in
DL unbedingt eine 1 stehen muss beim Aufruf von Destroy