TListView OwnerData OnData事件泄漏内存吗?

时间:2019-01-18 12:59:00

标签: listview delphi c++builder tlistview

我正在虚拟模式下使用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感到困惑-是内存泄漏以连续添加子项(同样适用于字幕)吗?

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

2 个答案:

答案 0 :(得分:3)

不,这不是内存泄漏。框架分配了SubItems对象,并在使用完该对象后将其取消分配。

答案 1 :(得分:3)

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