TListView OwnerData OnData 事件是否泄漏内存?

Is TListView OwnerData OnData event leaking memory?

我在虚拟模式下使用 TListViewOwnerData 设置为 true),这很简单。 TListView 采用 vsReport 视图样式并使用主标题和子项。 OnData 的事件代码很简单(代码是 C++ Builder 但如果你使用 Delphi 你就会明白):

void __fastcall TForm1::ListView1Data(TObject *Sender, TListItem *Item)
{
Item->Caption     = MyList[Item->Index].Name;
Item->SubItems->Add(MyList[Item->Index].Status);
}

到目前为止一切正常,但我对 SubItems->Add 感到困惑 - 连续添加这样的子项(也适用于标题)是否存在内存泄漏?

我是否应该在另一个事件(我还没有找到)中释放内存?

不,这不是内存泄漏。框架分配了 SubItems 对象,并在使用完毕后释放它。

没有。在内部,当 运行 处于虚拟模式时,TListView 维护一个物理 TListItem 对象。每当需要触发 OnData 事件时,它都会重用并清除该对象。您不需要手动释放任何 TListItem 数据。