Nearby36
namespace t15 {
class Heap {
public:
// 用户可以调用new创建对象
Heap()
{
p = malloc(100);
}
void destroy()
{
delete this;
}
private:
// 用户无法调用delete删除对象
~Heap()
{
free(p);
}
private:
void *p;
};
};
void test15()
{
t15::Heap *p = new t15::Heap();
p->destroy();
}
编译器在栈上创建对象时,如果类的析构函数是私有的,则无法回收栈上的内存。因此无法在栈上创建。
通过new创建对象,但是无法通过delete删除对象,需要提供额外的destroy()函数
因为栈上分配内存时,用完后会自动释放,所以会先检查析构函数是否可以调用,若不能调用则不能在栈上分配空间。
故只要将析构函数设为私有,即可限制内存的分配。
将构造函数设为私有
将析构函数设为私有