#include<iostream>
using namespace std;
//只能在堆上分配内存
class HeapOnly
{
public:
HeapOnly()
{
cout<<"Construct."<<endl;
}
void destory()
{
delete this;
}
private:
~HeapOnly()
{
}
};
//只能在栈上分配空间
class StackOnly
{
public:
StackOnly()
{
}
~StackOnly()
{
}
private:
void* operator new(size_t size) //将new操作符私有化,在外面无法调用
{
}
};
int main()
{
HeapOnly *hO=new HeapOnly();
hO->destory();
//HeapOnly he; //编译错误:HeapOnly::~HeapOnly”: 无法访问 private 成员(在“HeapOnly”类中声明),所以不能通过栈来分配这个对象的空间
StackOnly so;
//StackOnly *st=new StackOnly(); //StackOnly::operator new”: 无法访问 private 成员(在“StackOnly”类中声明)
}
因为 栈 是由系统自动分配和释放的,故如果要限制在栈中分配内存的话,可以把析构函数设为私有,这样系统就不能自动调用析构函数了。