只能在堆上或栈上创建对象的类
Posted TangguTae
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只能在堆上或栈上创建对象的类相关的知识,希望对你有一定的参考价值。
1、只能在堆上创建对象的类
平时一个类的创建是在栈上开辟的,除非是new出来的类是在堆上开辟的。首先得禁止在栈上开辟空间,不管是在堆上还是在栈上,都会调用构造函数。所以想法就是从构造函数下手。
首先将构造函数定义为私有的,这样就不能随意创建对象。
然后预留出接口用来创建对象。
class HeapOnly
public:
static HeapOnly* GetObj()//静态函数,可以通过类名来调用
return new HeapOnly;
private:
HeapOnly();//禁掉构造函数
;
int main()
std::shared_ptr<HeapOnly> ho(HeapOnly::GetObj());//用智能指针管理
return 0;
2、只能在栈上创建对象的类
只能在栈上开辟空间就说明创建对象时不能用new或者new[ ]。
所以我们可以考虑把operator new和operator new[ ]的方法给禁掉。设为私有或者 = delete
class StackOnly
public:
void* operator new(size_t sz, void* p) = delete;
void* operator new[](size_t sz, void* p) = delete;
void operator delete(void* p) = delete;
void operator delete[](void* ptr, void* voidptr) = delete;
;
以上是关于只能在堆上或栈上创建对象的类的主要内容,如果未能解决你的问题,请参考以下文章