C++——单例模式的实现

单例模式

概念:只能创建一个对象的类

实现关键:   1、所有构造函数都必须是private的(包括带参构造,拷贝构造,赋值运算符)

                     2、通过static成员函数申请对象空间,并返回地址

        3、定义一个静态标记,记录对象的个数,并控制

           4、析构函数将标记清空,以达到重复申请对象的目的,析构函数是public的

        5、赋值运算符、拷贝构造函数也必须是private的,由于编译器默认合成的赋值运算符和拷贝构造函数都是public的,所以这两个函数都要人为定义,而不能由编辑器默认合成

代码实现:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Single
 6 {
 7 private:                             //由于单例模式下所有构造函数都必须是private的,但编译器默认合成的所有构造函数都是public的,
 8     Single() = default;              //所以此时所有构造函数都要人为定义一遍
 9     Single(const Single&) = default;
10     Single& operator=(const Single&) = default;
11     
12 public:
13     static int flag ;
14     static Single* creat();
15     ~Single()        //析构函数是public的
16     {
17         flag = 0;
18     }
19 };
20 
21 int Single::flag = 0;
22 
23 Single* Single::creat()
24 {
25     if (flag == 0)
26     {
27         flag = 1;
28         return (new Single);
29     }
30     else
31         return nullptr;
32 }
33 
34 
35 int main()
36 {
37     Single *p1 = Single::creat();     //创建一个对象
38     delete p1;                        //销毁此对象
39 
40     Single *p2 = Single::creat();     //正确:由于之前的对象已经被销毁,所以可以创建一个新对象
41     Single *p3 = Single::creat();     //错误:该类只能存在一个唯一对象,故此时p3被创建为nullptr 
42     
43     return 0;
44 }

猜你喜欢

转载自www.cnblogs.com/FengZeng666/p/9345986.html