我有一个TObjectList<TUSBDevice>
,其中TUSBDevice
是我创建的一个类,我试着调用Delete
并将索引作为参数传递,但它只是做了TList.Delete()
所做的事情:从列表中移除指针,但不释放对象本身。
当Delete()
被调用时,我在TUSBDevice.Destroy()
上放置的断点不会中断。我还在TObjectList
上安装了一个监视器,我可以看到该项从列表中删除,但对象内存地址处的内容不会被释放。TUSBDevice
的析构函数:
destructor TUSBDevice.Destroy();
begin
removeDatabaseEntry();
filteredFolders.Free();
fileQueue.Free();
end;
2条答案
按热度按时间q3aa05251#
这是不可能回答你的问题,因为它不包含一个最低限度的可复制的例子;问题不在于你发布的代码,而在于其他地方。
尽管如此,“覆盖的”析构函数不运行的最常见原因是它实际上没有被覆盖,所以我几乎可以打赌,您的
Destroy
声明缺少override
:wlp8pajw2#
创建TObjectList成员后,必须立即将其属性OwnsObjects更改为True。这允许在不需要时销毁链接到对象列表的对象。(例如,删除成员或释放TObjectList成员时)