Die Referenzzählung ist dann zu nichts nütze und nichts weiter als lästig
Ich benutze da folgende Basisklasse:
Delphi-Quellcode:
type
TPureInterfacedObject = class(TObject, IInterface)
protected
{ IInterface }
function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
{ TPureInterfacedObject }
function TPureInterfacedObject.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
Result := E_NOINTERFACE;
end;
function TPureInterfacedObject._AddRef: Integer;
begin
Result := -1;
end;
function TPureInterfacedObject._Release: Integer;
begin
Result := -1;
end;
Damit generiert der Compiler zwar immer noch Aufrufe für _AddRef und _Release, aber die töten das betroffene Objekt nicht.