我会输入一个例子:
class A
{
public:
virtual ~A(){}
};
class B: public A
{
public:
~B()
{
}
};
int main(void)
{
A * a = new B;
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在在上面的例子中,析构函数将以递归方式从下到上调用.我的问题是编译器如何做这个MAGIC.
可能的重复:
何时使用虚拟析构函数?
如果一个类(具有虚函数)及其继承类的所有数据成员都是非指针类型(意味着它不能保存任何动态内存),是否需要将析构函数声明为虚函数?
例子
class base {
int x;
public:
virtual void fn(){}
};
class der: public base {
int y;
public:
void fn(){}
};
Run Code Online (Sandbox Code Playgroud)
这里我们需要一个虚拟析构函数吗?
c++ ×2