|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.04.2017, 15:42 | #1 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Пытаюсь разобраться с TList. Как чего удалять?
Что-то я вижу в примерах, как создаются TList, но не вижу, как они удаляются... Типа myList.Free. Для TList этого не нужно, что ль?
И ещё, как я прочитал, TList - это список указателей на элементы. Т.е., если у меня есть класс, и я добавляю объект класса в TList, то myList.delete[i] не удаляет объект из памяти? Мне нужно делать так? Часть 1. Присвоение. Код:
Код:
|
04.04.2017, 15:49 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
В TList всякий геморой с указателями, я его не осилил когда писал на Дельфи )
Говорю ж, TObjectList проще для объектов. + есть флаг, чтоб он сам вызывал Free при удалении элементов (методы Delete или Remove) или очистке списка или уничтожении (Free) списка. И .Free вместо Destroy.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 04.04.2017 в 15:54. |
04.04.2017, 16:02 | #3 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Ну хорошо, а если перенести это в TObjectList, то, в первую очередь, надо установить OwnsObjects := true, а потом Delete удаляет элемент из списка и сам объект? Я правильно понял, что TObjectList хранит сами объекты, а не указатели на них? Т.е. при
MyClass:=TMyClass.create; MyObjectList[0]:=MyClass; MyClass.Free; не уничтожает MyObjectList[0]? Его уничтожает MyObjectList.Delete(0)? |
04.04.2017, 16:09 | #4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Код:
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 04.04.2017 в 16:14. |
04.04.2017, 16:11 | #5 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Указатели. В Дельфи вроде нельзя никак передать объекты не по указателю, только если вручную скопировать значения.
TObjectList это просто более удобная обертка над TList для объектов. Добавлять через .Add, удалять Delete или Remove. Если с OwnsObjects, то самому не надо уничтожать элементы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
04.04.2017, 16:17 | #6 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
evg_m Вроде стало понятней немного, спасибо.
Alex11223, в случае TObjectList замечание от evg_m по первой части остаётся справедливым? |
04.04.2017, 16:30 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Да, только .Free у элемента никогда не надо если OwnsObjects.
И еще (в обоих случаях) если tmp это TMyClass, то до 2009 надо Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
04.04.2017, 16:31 | #8 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Ух ты. Это серьёзный комментарий, даже и не предположил бы. Спасибо!
|
04.04.2017, 16:36 | #9 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Боле того, у нас ВСЕ ссылки будут НЕВЕРНЫМИ. Цитата:
проверить это просто. Код:
Код:
программа — запись алгоритма на языке понятном транслятору
|
||
04.04.2017, 16:41 | #10 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Спасибо большое!! Теперь, надеюсь, не наделаю глупостей и не оставлю в памяти кучу мусора
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
пытаюсь разобраться | ya2500 | Visual C++ | 13 | 07.03.2013 15:32 |
пытаюсь разобраться | Кудаив | Помощь студентам | 6 | 01.05.2012 23:04 |
TlistView и Tlist непоучается массово удалять выбранные обьекты... | Человек_Борща | Общие вопросы Delphi | 4 | 09.01.2011 16:28 |
Пытаюсь разобраться в задании | fs444 | Microsoft Office Excel | 12 | 12.01.2010 12:57 |