Позвольте мне сделать это заявление об отказе: У меня есть ясное понимание вызова виртуальной функции в конструкторе или деструкторе.Косвенный вызов виртуальной функции от Destructor
В приведенном ниже коде я стараюсь избегать виртуального деструктора ТОЛЬКО ДЛЯ ЭКСПЕРИМЕНТАЛЬНОЙ цели.
Теперь мой вопрос:
В основной вызов Уничтожить удовольствие вызывает правильную виртуальную функцию. Я ожидаю, что любой вызов функции Destroy должен вызвать правильное виртуальное развлечение.
Но та же функция Destroy, которая находится в вызове Base destructor, является базовой виртуальной функцией 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;
}
Я не понимаю, что ваш пример кода имеет отношение к вашему вопросу. Пожалуйста, не могли бы вы уточнить, что деструкторы должны делать с чем угодно? –
@Oil Charlesworh: В основном вызов Destroy fun вызывает правильную виртуальную функцию. Я ожидаю, что любой вызов функции Destroy должен вызвать правильное виртуальное развлечение. Связано ли это со статической привязкой в Destructor. Но та же функция Destroy, которая находится в вызове базового деструктора, является базовой виртуальной функцией . – vrbilgi
У вас есть четкое представление о вызове виртуальных функций в конструкторе/деструкторе, и вы задаете такие вопросы. WTF? –