Является ли событие TListView OwnerData OnData утечкой памяти?
Я использую 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
- это утечка памяти для непрерывного добавления таких подэлементов (это также относится к заголовку)?
Должен ли я освободить память в другом событии (которое я еще не нашел)?
2 ответа
Нет, это не утечка памяти. Рамки выделены SubItems
объект, и он освобождает его, когда он закончил использовать его.
Нет. Внутренне TListView
поддерживает единый физический TListItem
объект при работе в виртуальном режиме. Он повторно использует и очищает этот объект всякий раз, когда OnData
событие должно быть запущено. Вам не нужно освобождать любой из TListItem
данные вручную.