| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Destroy для вложенных TList.TList |
| Автор: RinOSpro 9.7.2009, 11:11 | ||||
Всем привет! Есть 2 класса наседованные от TList,
Вопрос вот в чем, нужно ли в классе TBList, создавать деструктор который делает следующее:
Или этого не обязательно делать, так как это делается автоматом? |
| Автор: RomanEEP 9.7.2009, 13:08 | ||
| правильно так: 1)никогда не вызывать Destroy(), а вызывать Free. 2)Каждый объект отвечает за уничтожение только "своих" объектов
Добавлено через 3 минуты и 20 секунд ЗЫ: если TAList = class(TObjectList), то деструктор TAList.Destroy будет не нужен |
| Автор: Alexeis 9.7.2009, 13:13 |
| Для объектов удобно использовать TObjectList. Он умеет уничтожать объекты. |
| Автор: RinOSpro 9.7.2009, 16:51 |
Смотрел код TObjectList, вроде ни каких изменений, на счет Destroy-я объектов в нем нет. даже деструктор не переписан. |
| Автор: THandle 9.7.2009, 18:09 | ||
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 |