zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    php中奖概率算法
    phpize: command not found
    使用Mobile_Detect来判断访问网站的设备:安卓,平板,电脑
    jsonp应用
    数组转换一
    PhpStorm2016.3激活
    svn冲突问题详解 SVN版本冲突解决详解
    Pythono 实现 Permutation
    ubuntu 挂载优盘
    Customize R initiallization in Mac
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/9345986.html
Copyright © 2011-2022 走看看