Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: InterfacedObject freigeben

  Alt 24. Nov 2005, 13:54
Hallo,

ich habe das bei meinen Objekten folgendermaßen gelöst: Ich habe eine Variable FDestroying eingeführt und setze diese im Destructor. Zusätzlich habe ich _Release wie folgt abgewandelt:
Delphi-Quellcode:
function TInterfacedObject._Release: Integer;
begin
  if FDestroying then
  begin
    Result := FRefCount;
    Exit;
  end;
  Result := InterlockedDecrement(FRefCount);
  if (Result = 0) and not FDestroying then
  begin
    FDestroying := True;
    Destroy;
  end;
end;
Damit bist Du immer auf der sicheren Seite.

Zusätzlich solltest Du gegebenenfalls _AddRef anpassen. Falls Du nämlich in Destroy auf das Objekt zugreifst wird der Zähler wieder erhöht .
Delphi-Quellcode:
function TInterfacedObject._AddRef: Integer;
begin
  if FDestroying then
    Result := FRefCount
  else
    Result := inherited _AddRef;
end;
Gruß
xaromz
  Mit Zitat antworten Zitat