看到了优快云一篇帖子在讨论这个问题,某牛给出了回答,于是加以整理了一下
设计只能在堆上分配的类
方法:将类的构造函数或者析构函数设置为私有,迫使类对象在栈的构造时编译出错
#include <iostream>
using namespace std;
class OnlyHeap
{
public:
OnlyHeap()
{
cout<<"construct"<<endl;
}
void distory () const
{
delete this;
}
private:
~OnlyHeap()
{
cout<<"destruct"<<endl;
}
};
int main()
{
//OnlyHeap OnlyHeap; //会报错
OnlyHeap* o=new OnlyHeap;
o->distory();
return 0;
}
设计只能在栈上分配的类
重载new和delete为私有成员
#include <iostream>
using namespace std;
class OnlyStack
{
public:
OnlyStack()
{
cout<<"构造"<<endl;
}
~OnlyStack()
{
cout<<"析构"<<endl;
}
private:
void* operator new (size_t t);
void operator delete(void *ptr);
};
int main()
{
//A* a = new A; //会报错
OnlyStack a;
return 0;
}