schau dir einfach mal die _AddRef- und _Release-Funktionen der Basisklassen an, dann dürftest Du das ganze leicht verstehen (
Unit System):
Delphi-Quellcode:
function TInterfacedObject._AddRef: Integer;
begin
Result := InterlockedIncrement(FRefCount);
end;
function TInterfacedObject._Release: Integer;
begin
Result := InterlockedDecrement(FRefCount);
if Result = 0 then
Destroy;
end;
_Release ruft halt den Destruktor auf, wenn der interne Zähler 0 ist. Das ist fatal, weil das in vielen Fällen nicht heißt, dass das Objekt nicht mehr referenziert wird.
Man kann das umgehen, indem man eine eigene Klasse von TInterfacedObject ableitet und _Release überschreibt.