C++单例模式
来源:互联网 发布:2015年老龄化数据 编辑:程序博客网 时间:2024/05/17 22:04
什么叫单例模式?
单例模式也称为单件模式、单例模式约束了类的实例化,只允许类创建一个对象,也就是类的构造函数外界不可访问;并提供一个访问它的全局访问点,也就是提供了创建对象的接口。
构造函数却是私有的(前面是“ - ”符号),
然后在里面还公开了一个 GetInstance()方法,
单例模式的C++实现:
方法一:
class Singleton {private: Singleton(){} static Singleton* instance;public: ~Singleton(){} // 因为外界负责delete,所以须注意析构函数访问权限 static Singleton* Instance() { if(!instance) // 线程不安全,这里需要同步 instance_ = new Singleton; return instance_; }};该方法实现简单,缺点是在多线程的时候可能出现问题,而且该实例的析构函数会在什么时候执行?需要程序员负责在合适的时机销毁。
一个妥善的方法是让这个类自己知道在合适的时候把自己删除,或者说把删除自己的操作挂在操作系统中的某个合适的点上,使其在恰当的时候被自动执行。
我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量。利用这个特征,我们可以在单例类中定义一个这样的静态成员变量,而它的唯一工作就是在析构函数中删除单例类的实例,如下面的代码中的cleaner类。
class CSingleton{private:CSingleton(){}static CSingleton *m_pInstance;class cleaner //它的唯一工作就是在析构函数中删除CSingleton的实例{public:~cleaner(){if(CSingleton::m_pInstance)delete CSingleton::m_pInstance;}};static cleaner clr; //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数public:static CSingleton * GetInstance(){if(m_pInstance == NULL) //判断是否第一次调用m_pInstance = new CSingleton();return m_pInstance;}};<span style="font-size: 16px;"></span>类cleaner被定义为CSingleton的私有内嵌类,以防该类被在其他地方滥用。
程序运行结束时,系统会调用CSingleton的静态成员clr的析构函数,该析构函数会删除单例的唯一实例。
0 0
- C#单例模式
- C#-单例模式
- 单例模式(C++)
- 【C++】单例模式
- [C++]单例模式
- 单例模式(C++)
- C ++的单例模式
- 【C++】Chapter17:单例模式
- Object-c单例模式
- Objectove-c单例模式
- Objective C--单例模式
- Objective C--单例模式
- Objective C 单例模式
- Objective C--单例模式
- 单例模式(C#)
- 单例模式(C#)
- object-c 单例模式
- c++-单例模式Singleton
- 第六周 项目一 深复制体验2
- 第6周项目1——深复制体验(2)
- 省选模版复习——后缀数组
- 第六周项目一深复制体验
- 项目1-深复制的体验(2)
- C++单例模式
- BP神经网络Python实现
- 省选模版复习——LCT
- 第五周项目5——友元类
- 第六周上机项目2我的数组类
- 第6周项目1.1深复制
- Codeforces Round #299 (Div. 2) -- (A,B,C)
- 图像操作的形态学处理MATLAB
- 第六周项目1 深复制体验