Delphi: TObjectList 在调用 Delete() 后不会释放对象

Delphi: TObjectList won't free object after Delete() is called

我有一个 TObjectList<TUSBDevice>,其中 TUSBDevice 是我制作的 class。我尝试调用 Delete 并将索引作为参数传递,但它只是做了 TList.Delete() 所做的事情:从列表中删除指针但不释放对象本身。

我在 TUSBDevice.Destroy() 上设置的断点在调用 Delete() 时不会中断。我还查看了 TObjectList,我可以看到该项目已从列表中删除,但对象内存地址处的内容未被释放。

TUSBDevice 的析构函数:

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

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

不过,"overridden" 析构函数不是 运行 的最常见原因是它实际上没有被覆盖。所以我几乎可以打赌你的 Destroy 声明缺少 override:

TUSBDevice = class
  // ...
public
  // ...
  destructor Destroy; override;
  // ...
end;