作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
为什么我可以在免费存储上创建一个具有私有(private)析构函数的类的对象,但不能在堆栈上创建一个对象?
例如这是非法的:
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
}
最佳答案
当你在堆栈上创建它时,它必须在函数返回之前被销毁。假设有问题的函数无权访问析构函数,这是不允许的。
当您在免费商店中创建它时,它会留给其他可以访问析构函数的代码来销毁它。
具有私有(private)析构函数的类的成员函数可以在堆栈上创建一个实例。甚至可以在没有预先存在的实例的情况下调用静态成员函数。不过,写这样的东西可能没有充分的理由。
关于c++ - 私有(private)析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4920277/
我是一名优秀的程序员,十分优秀!