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

g2ieeal7  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(196)

我有一个TObjectList<TUSBDevice>,其中TUSBDevice是我创建的一个类,我试着调用Delete并将索引作为参数传递,但它只是做了TList.Delete()所做的事情:从列表中移除指针,但不释放对象本身。
Delete()被调用时,我在TUSBDevice.Destroy()上放置的断点不会中断。我还在TObjectList上安装了一个监视器,我可以看到该项从列表中删除,但对象内存地址处的内容不会被释放。
TUSBDevice的析构函数:

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

q3aa05251#

这是不可能回答你的问题,因为它不包含一个最低限度的可复制的例子;问题不在于你发布的代码,而在于其他地方。
尽管如此,“覆盖的”析构函数不运行的最常见原因是它实际上没有被覆盖,所以我几乎可以打赌,您的Destroy声明缺少override

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

wlp8pajw2#

创建TObjectList成员后,必须立即将其属性OwnsObjects更改为True。这允许在不需要时销毁链接到对象列表的对象。(例如,删除成员或释放TObjectList成员时)

Pieces := TObjectList<TPiece>.Create;
Pieces.OwnsObjects := True;

相关问题