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

本文介绍了如何通过修改类的构造函数、析构函数及重载new和delete操作符来实现类对象仅能在堆或栈上分配的目标。对于只能在堆上分配的类,通过将析构函数设为私有来阻止栈上的构造;而对于只能在栈上分配的类,则通过将new和delete设为私有来避免堆上的分配。
1881

被折叠的 条评论
为什么被折叠?



