![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
деструктор
9899100 © (2008-11-27 14:16:00)Подскажите,
я сделал свой класс
например TMyClass=class
....
Destructor Down;
end;
когда выпадает контекстное меню
у объекта этого класса
то в списке есть деструктор Free
т.е. я так понял что он всегда есть в любом классе
так вот, должен ли я в описании деструктора Down
вызывать деструктор Free? т.е. являеться ли вызов деструктора Free
в данном случае обязательным???
Сергей М. (2008-11-27 15:16:00) [1]
> 9899100
Да уж ..
Ты уж подумай про Даун-деструктор ..
Обязательность оного пока ничем не оправдана ..
Anatoly Podgoretsky (2008-11-27 15:00:00) [2]
> а в каком случае будет являться необходимым? если делать
> наследника от Tobject и иже с ними??
Все классы наследуются от Tobject
Сергей М. (2008-11-27 14:25:00) [3]
> если делать наследника от Tobject
Класс, объявленный как TMyClass=class, как раз им и является, несмотря на отсутствие явного указания предка.
Ega23 (2008-11-27 14:23:00) [4]1. Free не является деструктором. Это обычная процедура, в которой стоит вызов деструктора Destroy.
2. TObject.Destroy - виртуальный. Соответственно, изначально будет вызов деструктора конечного потомка, а потом уже обратно будет развёрнута вся цепочка так, каким образом inherited вызывается.
3. Ради академического интереса можно деструктор с отличным от Destroy именем создать, и даже заставить это дело работать. Но геморроев на этом можно впоследствии словить - мама не горюй.
Сергей М. (2008-11-27 14:23:00) [5]
> если делать наследника от Tobject и иже с ними?
Да.
Но при условии, что в методе-веструкторе любого из предков твоего класса осуществляются какие-либо действия.
Kolan (2008-11-27 14:21:00) [6]А зачем тебе два деструктора? Это настораживает.
9899100 (2008-11-27 14:20:00) [7]а в каком случае будет являться необходимым? если делать наследника от Tobject и иже с ними??
Сергей М. (2008-11-27 14:19:00) [8]Нет, в данном конкретном случае не является.
Более того, Free - это не деструктор, это метод класса, при выполнении которого вызывается виртуальный деструктор Destroy.