我有一个实现接口的类,它可用于插件.课堂宣言很简单.整个应用程序只有一个此类的实例.当调用返回接口的函数时,它会在检索到的接口上调用_AddRef,然后再将其作为结果传回.不幸的是,它一直有效,直到我尝试释放对象(参见"终结"部分) - 它报告无效的指针操作.如果我将其注释掉,它可以正常工作(但是FastMM报告内存泄漏,因此对象没有被释放).
这是函数中返回接口的部分代码(实际上它是我的"ServicesManager"类的重写的QueryInterface).
if ConfigManager.GetInterface(IID, obj) then
begin
ISDK_ConfigManager(obj)._AddRef;
result:= 0;
end
Run Code Online (Sandbox Code Playgroud)
和ConfigManager类的代码......
type
TConfigManager = class(TInterfacedObject, ISDK_ConfigManager)
private
...
end;
var
ConfigManager: TConfigManager;
implementation
...
initialization
ConfigManager:= TConfigManager.Create();
finalization
if ConfigManager <> nil then
FreeAndNil(ConfigManager); //if I comment it out, it leaks the memory but no Invalid Ptr. Op. raises
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我需要传递一个对ConfigManager 这个实例的引用.