gpt4 book ai didi

c++ - Destructor间接调用虚函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:46 26 4
gpt4 key购买 nike

让我声明一下:我对 Constructor 或 Destructor 中的虚函数调用有清楚的理解。

在下面的代码中,我试图避免仅出于实验目的的虚拟析构函数。

现在我的问题是:

在 main 中,对 Destroy fun 的调用调用了正确的虚函数。我期望对 Destroy Function 的任何调用都应该调用正确的虚拟函数。

但是放置在 Base 析构函数调用的 Base 虚函数中的同一个 Destroy 函数。

这与静态绑定(bind)或编译器优化有关吗?

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;

}

最佳答案

在析构函数中,this 的动态类型是当前类的动态类型,而不是对象的原始动态类型。参见例如http://www.artima.com/cppsource/nevercall.html .

关于c++ - Destructor间接调用虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com