码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-07-21 14:56:21      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:函数   class   模式   delete   names   构造   opera   ptr   default   

单例模式

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

实现关键:   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 }

 

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

标签:函数   class   模式   delete   names   构造   opera   ptr   default   

原文地址:https://www.cnblogs.com/FengZeng666/p/9345986.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!