![]() |
![]() |
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 - лист все убьет сам. |