私人析构函数

The*_* do 14 c++ memory-management

为什么我可以在免费存储上创建具有私有析构函数的类的对象但不在堆栈上?

例如,这是非法的:

class Foo
{
public:
   explicit Foo( int );
   static void delete_foo(Foo* foo ) { delete foo; }
private:
   int x;
   ~Foo();
   Foo( const Foo& );
   Foo& operator=(const Foo& );
};

int main()
{
   Foo * fooptr = new Foo(5); // legal
   Foo::delete_foo( fooptr ); // legal 
   Foo foo(5); // illegal
}
Run Code Online (Sandbox Code Playgroud)

Pot*_*ter 18

在堆栈上创建它时,必须在函数返回之前销毁它.假设有问题的函数无法访问析构函数,则不允许这样做.

当你在免费商店中创建它时,它留给其他代码,它可以访问析构函数来销毁它.

具有私有析构函数的类的成员函数可以在堆栈上创建实例.甚至可以在没有预先存在的实例的情况下调用静态成员函数.但是,写这样的东西可能没有充分的理由.


GMa*_*ckG 10

因为具有自动存储*的对象需要自动销毁.所以析构函数需要可以调用; 如果不是,则不能在自动存储中使用该类型.

相反,当您动态分配它时,您可以自行删除它.当然,你可以不这样做.

*这里的对象在"典型"平台上通常分配在堆栈上.