Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 15. Nov 2006, 20:14
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
  Mit Zitat antworten Zitat