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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2015, 15:25   #1
water_
Пользователь
 
Регистрация: 01.11.2013
Сообщений: 34
По умолчанию жизнь и смерть TList<T>

начал использовать дженерики в delphi
TList<T> - для хранения объектов

создаю TList<T>:
Код:
FItems:= TList<T>.Create
а вот как его очистить и удалить??

Код:
FItems.Free
... очищает только указатели на объекты

Код:
for i:= 0 to FItems.Count - 1 do 
  T(FItems[i]).Free
... не работает, поскольку не известно какой объект освобождать (какому объекту делать free)

как быть?
water_ вне форума Ответить с цитированием
Старый 25.02.2015, 15:44   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не надо к Т кастовать, думаю можно к TObject или чему-то типа того. Если вы только для объектов его используете. Но тогда лучше сразу объявить класс как <T: class>, <T: TMyBaseObject> и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 25.02.2015 в 15:49.
Alex11223 вне форума Ответить с цитированием
Старый 25.02.2015, 15:45   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А generics и не придумывали для того, чтобы хранить фиг знает что в одном списке.
TObjectList<TMySuperLOLObject> вот вам список объектов.
Человек_Борща вне форума Ответить с цитированием
Старый 25.02.2015, 16:29   #4
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
Человек_Борща
а тот же TList<> как бы так и хранит, фиг знает что.
lomastr_ вне форума Ответить с цитированием
Старый 25.02.2015, 16:30   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
а тот же TList<> как бы так и хранит, фиг знает что.
он строго одного типа сущности хранит.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.02.2015, 16:33   #6
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

А в топике что? ну и TList<TObject>

Последний раз редактировалось lomastr_; 25.02.2015 в 16:36.
lomastr_ вне форума Ответить с цитированием
Старый 25.02.2015, 17:53   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
А в топике что? ну и TList<TObject>
Список указателей на объекты. Собственно как и сам TLIst, TLIst<TObject> так же ничего освобождать не будет. А вот TObjectList<T> для этого и реализован.
Человек_Борща вне форума Ответить с цитированием
Старый 25.02.2015, 17:57   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
TList ... так же ничего освобождать не будет
Цитата:
Call Clear to empty the Items array and set the Count to 0. Clear also frees the memory used to store the Items array and sets the Capacity to 0
не все так просто как кажется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.02.2015, 18:24   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

это не тот случай, когда надо юзать дженерик.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.02.2015, 18:36   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Чего не так со случаем? У автора какой-то дженерик класс, внутри которого он создает дженерик лист.
Если предполагается, что класс будет использоваться только для объектов — надо было указать в объявлении класса T: class, T: TMyBaseObject и т.п. http://docwiki.embarcadero.com/RADSt...ts_in_Generics

Случай конечно может и правда не тот, но на основе этой информации такой вывод не сделать, нужно больше деталей.

Еще есть TObjectList<T>, кстати.

Цитата:
не все так просто как кажется
И где тут говорится об освобождении памяти занятой объектами?
Он вообще-то и не может это сделать, только TObjectList.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 25.02.2015 в 18:43.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
жизнь и смерть TList<T> water_ БД в Delphi 2 25.02.2015 17:41
Возможна ли жизнь с девушкой, будущей женой без детей всю жизнь? + Ипотечная тема :) Kasper1 Свободное общение 68 11.01.2012 00:54
Смерть, смерть, кругом синяя смерть! Alex Cones Компьютерное железо 10 04.05.2011 18:40
Зачет Или Смерть!!!!!!!!! rabe666 Помощь студентам 8 05.06.2008 16:03