虚拟析构函数 - c ++

时间:2013-07-07 17:24:26

标签: c++ constructor

我将基类destuctor定义为“Virtual”。 例如: -

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

并且在派生类中也是例如: 例如: -

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

我的问题是如何在删除指向派生类对象的基类的指针时调用两个destuctor。??????? 感谢..,

1 个答案:

答案 0 :(得分:1)

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

含义:

  

子子类 - &gt;子类 - &gt;类

总是调用析构函数。在破坏对象(子类)的一部分之后,它的派生类就被破坏了,等等。

您不必从子类中调用“超级”析构函数的原因是必须始终调用析构函数。此外,与您可能没有默认构造函数(强制您显式调用超级构造函数)的构造函数相反,在析构函数中不是这种情况。你总是有一个没有args的析构函数,所以编译器总是可以告诉“哪个”析构函数调用(因为没有那么多的选项)。