Является ли событие TListView OwnerData OnData утечкой памяти? - PullRequest
0 голосов
/ 18 января 2019

Я использую 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 - это утечка памяти для непрерывного добавления таких подэлементов (также для Caption)?

Должен ли я освободить память в другом событии (которое я еще не нашел)?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Нет. Внутренне TListView поддерживает один физический объект TListItem при работе в виртуальном режиме. Он повторно использует и очищает этот объект всякий раз, когда нужно вызвать событие OnData. Вам не нужно освобождать какие-либо данные TListItem вручную.

0 голосов
/ 18 января 2019

Нет, это не утечка памяти. Фреймворк выделил объект SubItems и освободил его, когда закончил его использовать.

...