017 --- 第21章 单例模式
简述:
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式包括:单例类。
单例类:定义一个GetInstance操作,允许客户访问它的唯一实例,GetInstance是一个静态方法,主要负责创建自己的唯一实例。
单例模式分为饿汉式和懒汉式
饿汉式:静态初始化的方式在自己被加载时就将自己实例化
懒汉式:要在第一次被引用时,才会将自己实例化
应用场景:通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。最好的办法就是,让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问实例的方法
注:开发环境调整为VS2017,操作系统win11
单例模式:仅提供一个线程安全双重锁定版本。
1 #include <iostream> 2 #include <mutex> 3 using namespace std; 4 5 class CSingleton 6 { 7 private: 8 static CSingleton* m_pSingleton; 9 static mutex m_Mutex; 10 private: 11 CSingleton() {}; 12 13 public: 14 static CSingleton* GetInstance() 15 { 16 if (NULL == m_pSingleton) 17 { 18 lock_guard<mutex> myLock(m_Mutex); 19 if (NULL == m_pSingleton) 20 { 21 m_pSingleton = new CSingleton(); 22 } 23 } 24 25 return m_pSingleton; 26 } 27 }; 28 CSingleton* CSingleton::m_pSingleton = NULL; 29 mutex CSingleton::m_Mutex; 30 31 int main() 32 { 33 CSingleton* pSingleton1 = CSingleton::GetInstance(); 34 CSingleton* pSingleton2 = CSingleton::GetInstance(); 35 36 if (pSingleton1 == pSingleton2) 37 { 38 cout << "两个对象是相同的实例" << endl; 39 } 40 41 system("pause"); 42 return 0; 43 }
输出结果: