TListView OwnerData OnData 事件是否泄漏内存?
Is TListView OwnerData OnData event leaking memory?
我在虚拟模式下使用 TListView
(OwnerData
设置为 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
数据。
我在虚拟模式下使用 TListView
(OwnerData
设置为 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
数据。