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

标签 c++ memory-management

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

相关文章:

c++ - 使用placement new 处理内存

c++ - 使用 boost :qi 解析两个字符串 vector

c# - C++文本文件读取性能

c++ - 为什么用十六进制来理解数字?

c - 汇编中保留的堆栈空间似乎与 C 代码不匹配

c++ - 异步 C++ 代码中的内存管理

c++ - 如何在 C++ 中将有符号字符初始化为无符号值,如 0xFF?

c++ - 我无法运行将 allegro5 与 cmake 结合使用的程序

python - 在 Python 中分析内存分配(支持 Numpy 数组)

c# - 如何在 Windows 7 中模拟内存不足的情况