虚析构函数 - c++

3

我将基类析构函数定义为“虚拟”的。 例如:

class Base
{
public:
    virtual ~Base()
    {
        cout << "Calling ~Base()" << endl;
    }
};

同样也适用于派生类,例如: 例如:
class Derived: public Base
{
public:
    virtual ~Derived()
    {
        cout << "Calling ~Derived()" << endl;
    }
};

我的问题是,在删除指向派生类对象的基类指针时,两个析构函数都被调用了。请问为什么会这样?谢谢。
1个回答

1

类的实例在内存中被构建为一个“建筑”,其中基础是层次结构中最高的类。析构函数的调用顺序与构造函数相反。

意思是:

子子类 -> 子类 -> 类

析构函数总是被调用。在你析构对象的一部分(子类)之后,它所派生的类就会被析构,以此类推。

你不必从子类中调用“超级”析构函数的原因是,析构函数必须始终被调用。此外,与构造函数不同的是,在析构函数中可能没有默认构造函数(这强制你显式调用超级构造函数),但在析构函数中并非如此。你总是有一个没有参数的析构函数,所以编译器可以始终知道要调用哪个析构函数(因为选项并不多)。


我没有完全明白 Avi 的意思...让我用例子来解释一下..谢谢。 - Sujeeth Damodharan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接