看到了CSDN一篇帖子在讨论这个问题,某牛给出了回答,于是加以整理了一下
设计只能在堆上分配的类
方法:将类的构造函数或者析构函数设置为私有,迫使类对象在栈的构造时编译出错
- #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;
- }