![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TList [D7, Win95/98, WinXP]
Simon © (2004-10-06 08:28:00)Подскажите TList уничтожает хранимые элементы или я сам должен удалять их из памяти
Amoeba (2004-10-06 11:27:00) [21]TList не может сам уничтожать хранимые элементы. Это верно для всех версий Delphi от 1-й до 7-й, посколько иначе и быть не может. Ведь по определению TList не знает и не может знать, что в нем хранится ("обычные" указатели или объекты).
Evgeny V (2004-10-06 09:08:00) [22]Вопрос несколько туманен, но надеюсь понял его.
Сорри, для дельфи 7 не знаю, но думаю это осталось так же как и в 6 версии.
При вызове Tlist.Delete просто уменьшает счетчик элементов в своем списке, если надо (Index < Count) реорганизует cписок указателей, освобождения памяти, распредленной под твой указатель для твоих данных, занесенный в TList не происходит. Это лежит на тебе, твоей программе.
Если имелось ввиду освобождение памяти самого TList, распределенной под хранения указателей, то и в этом случае не происходит освобождение памяти, смотри Capasity. При вызове СLear происходит освобождение памяти, распредленной под хранение указателей, но память ассоцированную с указателями ты так же должен освобождать сам
Это пример кода, часть только из хелпа по Tlist метод Add, в конце есть и следущие строки.
for B := 0 to (MyList.Count - 1) do
begin
ARecord := MyList.Items[B];
Dispose(ARecord);// освобождение памяти ассоциированной с указателем
end;
ЮЮ (2004-10-06 08:57:00) [23]Не за что, даже если там указатели на динамически выделенные record-ы, выделенная под них память тоже не освободится.
Simon (2004-10-06 08:55:00) [24]Спасибо
ЮЮ (2004-10-06 08:55:00) [25]если только они не хранят указатели на объекты: указатели уничтожатся, объекты нет. Для "хранения" объектов см. TObjectList
Digitman (2004-10-06 08:31:00) [26]уничтожает