我有一个TObjectList<TUSBDevice>
,其中TUSBDevice
是我制作的课程。我尝试使用作为参数传递的索引来调用Delete
,但它只是执行TList.Delete()
的作用:从列表中删除指针,但不释放对象本身。
我在TUSBDevice.Destroy()
上放置的断点在调用Delete()
时不会中断。我在TObjectList
上也有一块手表,可以看到该项目已从列表中删除,但该对象的内存地址中的内容没有被释放。
TUSBDevice
的析构函数:
destructor TUSBDevice.Destroy();
begin
removeDatabaseEntry();
filteredFolders.Free();
fileQueue.Free();
end;
无法回答您的问题,因为它不包含最小的可复制示例;问题不在于您发布的代码中,而在于其他地方。
仍然,“被覆盖的”析构函数不运行的最常见原因是它实际上未被覆盖。因此,我几乎可以打赌您的Destroy
声明缺少override
:
TUSBDevice = class
// ...
public
// ...
destructor Destroy; override;
// ...
end;