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