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 }

 

输出结果:

 

posted @ 2020-09-04 16:09  二是一种不三不亖的范  阅读(136)  评论(0编辑  收藏  举报