设计模式:单例模式
Posted k5bg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式:单例模式相关的知识,希望对你有一定的参考价值。
一.作用
- 不能通过构造函数构造,否则就能够实例化多个,构造函数需要私有声明
- 保证只能产生一个实例
用处:比如程序只能有一个日志系统,只能有一个管理器等
二.简单式
- 直接在类里面进行生成静态对象,但是这样可能会释放多次
- 饿汉:需要开辟内存
class CSingleton public: static CSingleton* GetInstance() if(m_pInstance==NULL) //m_pInstance==nullptr m_pInstance=new CSingleton(); return m_pInstance; private: CSingleton() ~CSingleton() if(Singleton::local_instance!=nullptr) delete Singleton::local_instance; static CSingleton* m_pInstance; ; CSingleton* CSingleton::m_pInstance=NULL; //或者 class CSingleton public: static CSingleton* GetInstance() return m_pInstance; private: CSingleton() ~CSingleton() if(Singleton::local_instance!=nullptr) delete Singleton::local_instance; static CSingleton* m_pInstance; ; CSingleton* CSingleton::m_pInstance=new CSingleton();;
//调用 CSingleton* p1=CSingleton::GetInstance(); CSingleton* p2=CSingleton::GetInstance(); //p1和p2地址一样
三.完整式
- 在多线程下可能会new两次,所以直接返回静态对象的地址,就不用开辟内存释放
- 懒汉:没有内存操作
class Singleton private: static Singleton* local_instance; Singleton() ~Singleton() public: static Singleton* getInstance() static Singleton local; return &local; //或者 static Singleton& getInstance() static Singleton local; return local; ;
//调用 Singleton* p1=Singleton::getInstance(); Singleton* p2=Singleton::getInstance(); //p1和p2地址一样
以上是关于设计模式:单例模式的主要内容,如果未能解决你的问题,请参考以下文章