Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление из TList, Как 
:(
    Опции темы
WERITAS
Дата 23.10.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



САБЖ. Как удалить объекты (!), а не ссылки (как это делает метод Delete) из TList'а? 


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Демо
Дата 23.10.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Вручную.

Код

for i := MyList.Count-1 downto 0 do TObject(MyList[i]).Free;
MyList.Free;



Добавлено @ 20:29 
Либо воспользоваться TObjectList.


--------------------
    
PM MAIL ICQ Skype   Вверх
WERITAS
Дата 24.10.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



А операцию .Free, без .Delete можно использовать? Просто я вот ее использую, а у меня объект не удаляеца smile


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Bose
Дата 24.10.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



WERITAS, если ты используешь Tlist для хранения списка объектов и объекты должны быть освобождены с освобождением Tlista, то тебе придётся освобождыть их вручную.

Проще воспользоваться для этих целей списком TobjectList с параметром owned:=True;
PM MAIL WWW Skype   Вверх
WERITAS
Дата 24.10.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Цитата
 TobjectList 

О_О Никогда не слышал... Знаком только с TList'ом и  TStringList'ом. В каком это юните?


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
digs
Дата 24.10.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.10.2006

Репутация: нет
Всего: 1



Цитата(WERITAS @  24.10.2006,  21:23 Найти цитируемый пост)
 В каком это юните?

Contnrs
PM MAIL   Вверх
WERITAS
Дата 25.10.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Уфф... Не знаю, что это за TObjectList, но объекты моего класса сохранятся в нем не желают, что бы я ни делал! smile 
Все-таки хотел бы использовать TList, как же в нем удалить объект??? Код вроде 
Код

TObject(MyList[i]).Free;

к удалению объекта не приводит. 


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Bose
Дата 25.10.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



TObjectList - это прямой потомок от Tlist, и работать с ним нужно также как и с Tlist. Единственное отличие в том, что при заданном в конструкторе параметре OwnObjects:=True, перед удалением списка из ссылки вызывается деструктор объекта.

Код

TObject(MyList[i]).Free;


А у тебя с деструктором в твоём классе всё в порядке?

Вызов метода Free в твоём классе вообще даёт хоть какой-нибудь эффект?
PM MAIL WWW Skype   Вверх
WERITAS
Дата 25.10.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Вот я уже сам начал догадываться, что после строчки .Delete, нужно бы деструктор вызвать. 
Деструктор пользовательского класса пуст  smile А можетTList'а вызвать надо? Только какие там параметры писать? smile


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Bose
Дата 25.10.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(WERITAS @  25.10.2006,  19:45 Найти цитируемый пост)
Вот я уже сам начал догадываться, что после строчки .Delete, нужно бы деструктор вызвать. 

Не после, а перед.  smile Хотя, если ты сохраняешь указатель во временную переменную, то  без разницы.



Цитата(WERITAS @  25.10.2006,  19:45 Найти цитируемый пост)
Деструктор пользовательского класса пуст

деструктор должен быть объявлен с директивой override И в теле должен содержить вызов inherited деструктора smile

Добавлено @ 20:04 
Цитата(WERITAS @  25.10.2006,  19:45 Найти цитируемый пост)
А можетTList'а вызвать надо? Только какие там параметры писать? 

а перед освобождением Tlista тебе нужно освободить все объекты. Смотри код, который дал Демо.
PM MAIL WWW Skype   Вверх
WERITAS
Дата 25.10.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Если я деструктор пользовательского класса вызываю явно, то прога вылетает smile

Цитата
а перед освобождением Tlista тебе нужно освободить все объекты. Смотри код, который дал Демо

Куда мне впихнуть код, который дал мне Демо? О_о


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Bose
Дата 25.10.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(WERITAS @  25.10.2006,  21:09 Найти цитируемый пост)
Если я деструктор пользовательского класса вызываю явно, то прога вылетает 

непорядок



Цитата(WERITAS @  25.10.2006,  21:09 Найти цитируемый пост)
Куда мне впихнуть код, который дал мне Демо? О_о

перед
TList.Free



PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.