Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2011, 15:07   #1
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию Уничтожает ли Tlist.free объекты, на которые ссылается?

Всем доброго времени суток.

Запутался.
У меня есть класс, унаследованный от Tlist. Насколько я понимаю, он хранит ссылки на объекты.

Как я добавляю объекты:
item := TSomeClass.Create;
List.Add(Item);

А в деструкторе класса, унаследованного от Tlist, уничтожаю каждый объект.

С другой стороны, я попробовал не использовать свой деструктор и никаких утечек памяти не было. Я сделал вывод, что Tlist при своем уничтожении сам уничтожает объекты.

Потом я решил в свой Tlist копировать кое-какие элементы (ну а точнее ссылки на объекты) из другого Tlist. Так вот, после уничтожения другого Tlist, не основного, объекты, хранимые в главном Tlist остаются жить.

Как это можно объяснить? Какова же все-таки логика работы Tlist? Как правильно его уничтожать?

Заранее благодарен.
Anfall вне форума Ответить с цитированием
Старый 02.09.2011, 15:19   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

TList хранит указатели, и не освобождает их. Всё остальное от лукавого.

> никаких утечек памяти не было

как проверяли?

> в деструкторе класса, унаследованного от Tlist, уничтожаю каждый объект

гораздо лучше перекрыть TList.Notify();
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 02.09.2011, 16:13   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а почему не TObjectList взяли за основу?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.09.2011, 16:20   #4
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Утечки проверял, добавив еще до создания форм:
Код:
ReportMemoryLeaksOnShutdown := true;
Код:
а почему не TObjectList взяли за основу?
Ну его работа для меня пока непонятна еще больше, да и хочется с Tlist разобраться.

Зы: Д2010

Последний раз редактировалось Anfall; 02.09.2011 в 17:18.
Anfall вне форума Ответить с цитированием
Старый 02.09.2011, 21:51   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Anfall,
TObjectList наследник TList. Особой разницы я не нашёл. Ну разве что TObjectList сам освобождает все добавоенные в него обьекты в своём деструкторе.

ДОБАВИЛ

Сам класс находится в Contnrs

Единственно что подскажу, это решение проблемы с тем что код:
Код:
{
TmyClass мой класс наследуется от TObjectList
tMyClassItem - Класс моего обьекта котрый хранится в myClass
}
TmyClass.GetMeItem(aIndex:Integer):TMyClassItem;
begin
Result:=Items[aIndex];
end;
вернёт тебе обьект класса TObject. А это не есть хорошо.
По этому делай так:
Код:
{
TmyClass мой класс наследуется от TObjectList
tMyClassItem - Класс моего обьекта котрый хранится в myClass
}
TmyClass.GetMeItem(aIndex:Integer):TMyClassItem;
begin
Result:=(Items[aIndex] as TMyClassItem);
end;

Последний раз редактировалось Человек_Борща; 02.09.2011 в 23:58.
Человек_Борща вне форума Ответить с цитированием
Старый 03.09.2011, 00:50   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Утечки проверял, добавив еще до создания форм:
Код:
ReportMemoryLeaksOnShutdown := true;
А добавляемые в список объекты - случайно не компоненты с владельцем-то, а?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 03.09.2011, 20:04   #7
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Человек_Борща, спасибо, посмотрю.

GunSmoker, Спасибо. Не совсем понял. Объекты - это объекты моего класса, который ни от чего не унаследован.
Anfall вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как програмно узнать имя файла на который ссылается ярлык assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.06.2011 23:22
Архиватор WinRar медленно уничтожает мой компьютер... ололошенько Свободное общение 7 03.10.2010 23:41
Как найти куда ссылается форма kakawkin HTML и CSS 5 04.06.2010 13:34
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50