Сообщение Re: Вызов виртуального метода из деструктора от 05.08.2019 13:50
Изменено 05.08.2019 13:51 Carc
Re: Вызов виртуального метода из деструктора
Здравствуйте, Barbar1an, Вы писали:
B>
Деструктора C нет, соответтственно вызывается базовый класса B, в момент вызова деструктора класса B таблицы виртуальных функций класса C уже нет. Поэтому и вызывается B::Virtual (через вызов A::Normal)
B>
B>class A
B>{
B>public:
B> void Normal()
B> {
B> Virtual();
B> }
B> virtual void Virtual()
B> {
B> // это не вызовется - ОК
B> }
B>};
B>class B : public A
B>{
B>public:
B> virtual void Virtual() override
B> {
B> // это вызовется - ЧЕ ЗА?
B> }
B> ~B()
B> {
B> Normal();
B> }
B>};
B>class C : public B
B>{
B>public:
B> virtual void Virtual() override
B> {
B> // это не вызовется - ЧЕ ЗА?
B> }
B>};
B>int _tmain(int argc, _TCHAR* argv[])
B>{
B> C c;
B> return 0;
B>}
B>
Деструктора C нет, соответтственно вызывается базовый класса B, в момент вызова деструктора класса B таблицы виртуальных функций класса C уже нет. Поэтому и вызывается B::Virtual (через вызов A::Normal)
Re: Вызов виртуального метода из деструктора
Здравствуйте, Barbar1an, Вы писали:
B>
Деструктора C нет, соответтственно вызывается базовый класса B, в момент вызова деструктора класса B таблицы виртуальных функций класса C уже нет. Поэтому и вызывается B::Virtual (через вызов A::Normal)
По моему так!?!
B>
B>class A
B>{
B>public:
B> void Normal()
B> {
B> Virtual();
B> }
B> virtual void Virtual()
B> {
B> // это не вызовется - ОК
B> }
B>};
B>class B : public A
B>{
B>public:
B> virtual void Virtual() override
B> {
B> // это вызовется - ЧЕ ЗА?
B> }
B> ~B()
B> {
B> Normal();
B> }
B>};
B>class C : public B
B>{
B>public:
B> virtual void Virtual() override
B> {
B> // это не вызовется - ЧЕ ЗА?
B> }
B>};
B>int _tmain(int argc, _TCHAR* argv[])
B>{
B> C c;
B> return 0;
B>}
B>
Деструктора C нет, соответтственно вызывается базовый класса B, в момент вызова деструктора класса B таблицы виртуальных функций класса C уже нет. Поэтому и вызывается B::Virtual (через вызов A::Normal)
По моему так!?!