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

C++ 堆和堆栈上的私有析构函数,c++,C++,这会抛出一个错误,说明析构函数是私有的 我很困惑-在调用free()之前不在内部删除也调用析构函数?非常类似于b是指向base的指针。它的析构函数是公共的。尝试derived*d=new-derived();删除d认为C++封装不像“监狱”,而是一个标签“请不要打扰”。而虚拟函数是一个关键。C++中的访问控制一般适用于名称。 class base { public: virtual ~base() = 0; }; base::~base() { cout <<"De

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


我很困惑-在调用free()之前不在内部删除也调用析构函数?

非常类似于
b
是指向
base
的指针。它的析构函数是公共的。尝试
derived*d=new-derived();删除d认为C++封装不像“监狱”,而是一个标签“请不要打扰”。而虚拟函数是一个关键。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;
}