Позвольте мне сделать это заявление об отказе: У меня есть четкое понимание вызова виртуальной функции в конструкторе или деструкторе.
В приведенном ниже коде я пытаюсь избежать виртуальногодеструктор ТОЛЬКО ДЛЯ ЭКСПЕРИМЕНТАЛЬНОЙ цели.
Теперь мой вопрос:
В основном вызов Destroy fun вызывает правильную виртуальную функцию.Я ожидаю, что любой вызов функции Destroy должен вызывать правильное виртуальное удовольствие.
Но та же самая функция Destroy, помещенная в вызов базового деструктора, является базовой функцией Base.
Это связано со статическим связыванием или компиляторомоптимизация?
class Base
{
public:
Base()
{
}
void Destroy()
{
callVirtual();
}
virtual void callVirtual()
{
cout<<"In Base callVirtual "<<endl;
}
~ Base()
{
cout<<"In Base Destructor"<<endl;
Destroy();
}
};
.
class Derived : public Base
{
public:
Derived()
{
}
void callVirtual()
{
cout"<<In Derived callVirtual"<<endl;
}
};
.
int main()
{
Base *pointer = new Derived();
pointer->Destroy(); // Calls the right callVirtual
return 0;
}