1

我有一个TObjectList<TUSBDevice>TUSBDevice我所做的课程在哪里。我尝试Delete使用作为参数传递的索引进行调用,但它只是做了什么TList.Delete():从列表中删除指针但不释放对象本身。

我放置的断点在被调用TUSBDevice.Destroy()时不会中断。Delete()我也有一个手表TObjectList,我可以看到该项目已从列表中删除,但该对象的内存地址处的内容没有被释放。

的析构函数TUSBDevice

destructor TUSBDevice.Destroy();
begin
  removeDatabaseEntry();
  filteredFolders.Free();
  fileQueue.Free();
end;
4

1 回答 1

2

无法回答您的问题,因为它不包含最小的可重现示例;问题不在于您发布的代码,而在于其他地方。

尽管如此,“被覆盖的”析构函数没有运行的最常见原因是它实际上没有被覆盖。所以我几乎可以打赌你的Destroy声明缺少override

TUSBDevice = class
  // ...
public
  // ...
  destructor Destroy; override;
  // ...
end;
于 2020-03-15T12:15:07.840 回答