Delphi 让接口类不自动释放实例

从 Delphi 接口 interface中继承的类,创建后不需要释放,系统会自动释放这些实例。

释放时机:不再使用这些实例时会被释放。比如创建了一个实例A,将这个实例传递给B,如果B释放时,会检查A是否还在被其他的实例使用,如果不再使用,将会自动释放B。

有些情况不需要自动释放,比如全局变量。需要重载两个函数,来防止系统自动释放实例

type
// 定义接口
IMyInterface = interface
end;

// 接口实现
TMyInterface = class(TInterfacedObject, IMyInterface)
  protected
    // 重载这两个函数,让引用计数器失效,编译器不会自动释放这个实例
    function _AddRef: integer; stdcall;
    function _Release: integer; stdcall;
end;

implementation

function TMyInterface._AddRef: integer;
begin
  Result := -1;
end;

function TMyInterface._Release: integer;
begin
  Result := -1;
end;

你可能感兴趣的:(Delphi,delphi,接口)