Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

Правильное оформление деструктора   Найти похожие ветки 

 
Vitaliy_____   (2009-06-18 13:43) [0]

И снова здравствуйте!
Продолжим тему, поднятую в
http://delphimaster.net/view/2-1242878656/
Суть вопроса такая:
Имеется "базовый класс", наследуемый от TObject.
Здесь все сделано как мы разобрались,
destructor destroy; override;

От него наследуется другой класс. Как в данном случае описать деструктор?
Необходимо чтобы также был выполнен сначала деструктор наследуемого класса, затем "базового".
Как тут правильно описать?
То есть, имеем иерархию TObject-Class1-Class2.
Как описать деструктор в Class2, чтобы при вызове TObject(elem).Free у нас выполнились все 3 деструктора (Class2, Class1 и, собственно, TObject).
inherited в конце деструкторов стоит.
Собственно, вопрос даже в том, будет ли еще раз перекрыт TObject.destroy если мы в Class2 напишем destructor destroy; override;?
И нужно ли в Class1 описать деструктор как virtual?


 
Loginov Dmitry ©   (2009-06-18 14:05) [1]

В той ветке же все объяснили. Ни надо ничего выдумывать. Нужно просто делать

TLineData = class(TObject)
...
destructor destroy; override;

end;
...

destructor TLineData.destroy;
begin
....
inherited;
end;


и так для любого класса независимо от уровня наследника.
В этом случае при вызове TObject.Free гарантированно выполнятся все деструкторы. Это же так просто!)


 
Ega23 ©   (2009-06-18 14:09) [2]


> гарантированно выполнятся все деструкторы


Скажем так, они должны выполнится. А вот выполнятся-ли - зависит от мозгов и рук разработчика.


 
Vitaliy_____   (2009-06-18 14:11) [3]

И тем не менее, хотелось убедиться, что для следующего уровня наследования директива override; СНОВА перекроет TObject.destroy...
Если есть сомнения, лучше спросить, чем потом голову ломать ведь так :)


 
Ega23 ©   (2009-06-18 14:13) [4]


> СНОВА перекроет TObject.destroy...


Строго говоря, она его не перекроет. Она перекроет метод Destroy прямого класса-предка. В случае, когда предок - TObject, то да, перекроет TObject.Destroy


 
Loginov Dmitry ©   (2009-06-18 14:14) [5]

Убедился?)


 
Vitaliy_____   (2009-06-18 14:21) [6]

Ну, раз люди говорят... Стоит поверить.
А то знаете ли, день рабочий [у нас] уже заканчивается, голова тяжелая, мало ли что в голову взбредет, а потом разгребай это все :)


 
Dennis I. Komarov ©   (2009-06-18 14:25) [7]

А в генофонде покапаться? Там же одно на другом...



Страницы: 1 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
2-1245666992
kirat
2009-06-22 14:36
2009.08.16
как в TreeView запомнить на какой позиции находится выделение


15-1245343464
pavel_guzhanov
2009-06-18 20:44
2009.08.16
Есть пример программы на Q-basic. Как перевести в Delphi?


4-1202326013
Velimir
2008-02-06 22:26
2009.08.16
Получить информацию о ресурсах PCI устройства


15-1242118246
Германн
2009-05-12 12:50
2009.08.16
ООО Кредитэкспресс


3-1226061660
Sergey2
2008-11-07 15:41
2009.08.16
приконнектиться к SQL server