设计一个类,我们只能生成该类的一个实例。
2016-05-02 13:47
447 查看
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。 (1)这种方法只适用单线程。 #include<iostream> #include<stdlib.h> using namespace std; class Csingleton { private: Csingleton()//构造函数私有化 { cout<<"Csingleton()"<<endl; } static Csingleton* m_pInstance; public: static Csingleton* GetInstance() { //判断是否是第一次调用 if(m_pInstance==NULL) { m_pInstance= new Csingleton(); } return m_pInstance; } }; Csingleton* Csingleton::m_pInstance=NULL; void test() { Csingleton* c=Csingleton::GetInstance(); Csingleton* s=Csingleton::GetInstance(); } int main() { test(); system("pause"); return 0; }(2)多线程,当Csingleton还没有创建出来时,需要加把锁;当Csingleton创建出来之后,无需加锁。
#include<iostream> #include<stdlib.h> using namespace std; class Csingleton { private: Csingleton()//构造函数私有化 { cout<<"Csingleton()"<<endl; } static Csingleton* m_pInstance; public: static Csingleton* GetInstance() { //判断是否是第一次调用 if(m_pInstance==NULL) { /*lock(syncObj);*/ m_pInstance= new Csingleton(); } return m_pInstance; } }; Csingleton* Csingleton::m_pInstance=NULL; void test() { Csingleton* c=Csingleton::GetInstance(); Csingleton* s=Csingleton::GetInstance(); } int main() { test(); system("pause"); return 0; }(3)利用静态构造函数,初始化静态变量的时候创建实例。
#include<iostream> #include<stdlib.h> using namespace std; class Csingleton { private: Csingleton()//构造函数私有化 { cout<<"Csingleton()"<<endl; } private: static Csingleton* m_pInstance=new Csingleton(); public: static Csingleton* GetInstance() { return m_pInstance; } }; void test() { Csingleton* c=Csingleton::GetInstance(); Csingleton* s=Csingleton::GetInstance(); } int main() { test(); system("pause"); return 0; }结果:
本文出自 “liveyoung” 博客,转载请与作者联系!
相关文章推荐
- 请实现一个函数,把字符串中的每个空格替换成“%20”。
- 冒泡排序法
- 使用Httpclient框架提交数据-get
- 【Oracle】6.JDBC
- vector
- WebView学习
- log4net 课二
- 两个栈实现一个队。
- 事件原理
- TXT有声小说
- Windows常用快捷键
- 【AKOJ】1184-ASCII码排序(2)
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 通过导航栏进入多个视图
- SpringData 学习(4)—— 使用 @Query 注解实现查询
- [从头学数学] 第202节 矩阵与变换
- c/c++在windows下获取时间和计算时间差的几种方法总结
- Oracle自定义异常的使用
- 多项式相加
- Leetcode #344. Reverse String 逆转字符串 解题报告