堆和堆栈上的私有析构函数

时间:2015-03-12 06:02:17

标签: c++

class base
{
public:
    virtual ~base() = 0;
};

base::~base()
{
    cout <<"Destructing base"<<endl;
}

class derived : public base
{
    ~derived()
    {
        cout <<"Destructing derived"<<endl;
    }
};

int main()
{
    base* b = new derived();
    delete b;
    b = 0;

}

这里 - 我已经将派生的析构函数声明为私有并在堆上分配了内存。但是当我运行它时,我确实看到派生的析构函数也被调用了。 相反,如果我在主函数中运行它,如下所示:通过在代码段上分配内存,如下所示 -

int main()
{
  derived d;
}

这会抛出一个错误,说析构函数是私有的。

我很困惑 - 在调用free()之前,内部没有删除也会调用析构函数吗?

0 个答案:

没有答案