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()之前,内部没有删除也会调用析构函数吗?