![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| RinOSpro |
|
||||
|
Unregistered |
Всем привет! Есть 2 класса наседованные от TList,
Вопрос вот в чем, нужно ли в классе TBList, создавать деструктор который делает следующее:
Или этого не обязательно делать, так как это делается автоматом? |
||||
|
|||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
правильно так:
1)никогда не вызывать Destroy(), а вызывать Free. 2)Каждый объект отвечает за уничтожение только "своих" объектов
Добавлено через 3 минуты и 20 секунд ЗЫ: если TAList = class(TObjectList), то деструктор TAList.Destroy будет не нужен |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Для объектов удобно использовать TObjectList. Он умеет уничтожать объекты.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
||||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Плохо смотрел.
Если он создается с флагм true то по уничтожению убьет все объекты, если объекты это тоже TObjectList то для каждого из них вызовется виртуальный деструктор, который уничтожит все внутренние объекты. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
RinOSpro, деструктор у TObjectList остался старый, от TList. Но реализован метод Notify, реализован следующим образом:
То есть, если параметр переданный в конструкторе - true и действием является удаление элемента списка, то тогда объект освобождается. В самой реализации TObjectList метод Notify с lnDeleted не вызывается, а вот в TList такой вызов Notify при удалении элемента предусмотрен. То есть при "убийстве" экземпляра TObjectList'а происходит следующее(выше TList'а по иерархии не поднимаемся). TList.Destroy -> TList.Clear -> TList.SetCount(0) -> тут для каждого элемента списка выполняется TList.Delete, а в нем происходит вызов Notify с lnDeleted -> TObjectList.Notify. Вот тут то и происходит уничтожение объектов находящихся в списке. Про TObjectList еще можно глянуть статейку: http://base.vingrad.ru/view/3110-TObjectList |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |