当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。
class alloc
{
public:
alloc():
private:
~alloc();
};
如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。
如果在堆上分配空间,只有在delete时才会调用析构函数。
可以添加一个destroy()函数来释放,从而解决不能在析构函数中添加delete的问题。
class alloc
{
public:
alloc():
destroy(){ delete this;}
private:
~alloc();
};
实例测试:
设置为私有未new:
#include<iostream>
using namespace std;
class A
{
public:
A() {};
void Get() { std::cout << "AAA" << std::endl;};
private:
~A() {};
};
int main()
{
A a;
a.Get();
return 0;
}
结果:
在堆空间申请:
#include<iostream>
using namespace std;
class A
{
public:
A() {};
void Get() { std::cout << "AAA" << std::endl;};
private:
~A() {};
};
int main()
{
A* a = new A();
a->Get();
return 0;
}
结果:
正常输出:AAA