К списку форумов К списку вопросов
TList, вопрос по сборке мусора
megabax
30.09.2004 - 21:54
В делфи я объявил класс, производный от TList. В нем у мнея храняться указатели на структуру. Удаляют ли из памяти методы Delete, clera, Destroy и Free эти структуры или об этом мне надо заботится самому?
tvv
1 - 01.10.2004 - 00:20
нет не удаляют, они удаляют только указатели из списка
VaS
2 - 02.10.2004 - 12:14
Два варианта.
1. Применить не наследование, а обертку над TList, делегируя ему управление собственно списком указателей и добавить логику выделения/освобождения памяти под структуры в указанные тобой методы.
2. Переопределить метод TList.Notify, как это делается в TObjectList:
.
procedure TObjectList.Notify(Ptr: Pointer; Action: TListNotification);
begin
  if OwnsObjects then
    if Action = lnDeleted then
      TObject(Ptr).Free;
  inherited Notify(Ptr, Action);
end;
.
Только тебе нужно будет вызывать не Free(), а Dispose() или FreeMem().
Delphist
3 - 02.10.2004 - 15:25
Есть еще третий вариант (если это не ведет к большим переделкам прочей логики).
Переделать структуры в классы и использовать готовый TObjectList, у него есть булевое свойство OwnsObjects, если True - лист все убьет сам.

К списку вопросов на форуме Программирование

>>