只能在堆上或栈上创建对象的类

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;
;

以上是关于只能在堆上或栈上创建对象的类的主要内容,如果未能解决你的问题,请参考以下文章

单例设计模式(懒汉模式饿汉模式)

单例设计模式(懒汉模式饿汉模式)

C++中如何设计一个类只能在堆或者栈上创建对象

如何限制对象只能建立在堆上或者栈上

如何限制对象只能建立在堆上或者栈上(转载)

C++:在堆上创建对象,还是在栈上?