Thema: Delphi Array korrekt freigeben

Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.226 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Array korrekt freigeben

  Alt Gestern, 12:23
Das bezieht sich auf die Variablen, nicht auf das Objekt dahinter. Wenn du eine Interface-Variable auf nil setzt (oder Finalize(..) aufrufst oder was immer) verringerst du den Referenzzähler. Und erst wenn der auf null geht, wird das Objekt freigegeben.

Das gleiche bei Arrays, Strings, usw.

Beispiel:

Delphi-Quellcode:
program Project5;

{$APPTYPE CONSOLE}
{$R *.res}

uses System.SysUtils;

var a, b: IInterface;

begin
   a := TInterfacedObject.Create();
   b := a;
   WriteLn( TInterfacedObject(b).RefCount ); // 2

   Finalize(a);

   Assert( not Assigned(a) );
   Assert( Assigned(b) );
   WriteLn( TInterfacedObject(b).RefCount ); // 1

   Assert( Supports(b, IInterface, {out} a) );
   Assert( Assigned(a) );
   WriteLn( TInterfacedObject(b).RefCount ); // 2
end.
  Mit Zitat antworten Zitat