gpt4 book ai didi

c++ - 私有(private)析构函数

转载 作者:IT老高 更新时间:2023-10-28 22:33:42 27 4
gpt4 key购买 nike

为什么我可以在免费存储上创建一个具有私有(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com