• 设计模式之单件模式


    看代码

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class ABC
     5 {
     6 public:
     7 //private:        //构造函数私有化,则无法被外部调用
     8     ABC(){}
     9     ~ABC(){}
    10 };
    11 
    12 
    13 int main()
    14 {
    15     ABC a;          //实例化1
    16     ABC *b=new ABC; //实例化2
    17     return 0;
    18 }

    编译没有错误,证明实例化成功

    若将public改为private或protected,再运行则出现错误

    证明构造函数私有化之后,无法被外部调用,这就涉及到了单件

    只能被类内部的成员函数调用,所以可以弄一个共有函数去供外部调用,然后这个函数返回一个对象,为了保证多次调用这个函数返回的是一个对象,我们可以把类内部要返回的对象设置为静态的

    #include <iostream>
    using namespace std;
    
    class ABC
    {
    private:        //构造函数私有化,则无法被外部调用
        ABC(){}
        static ABC *p;
    public:
        static ABC* getInstance()
        {
        if(p==NULL)
            p=new ABC();
        return p;
        }
    };
    ABC* ABC::p=NULL;
    
    int main()
    {
        ABC *t=ABC::getInstance();   //实例化1
        ABC *tt=ABC::getInstance(); //实例化2
        cout<<t<<endl<<tt<<endl;   
        system("pause");
        return 0;
    }

    运行:

    地址一样

    第一次调用获取实例的函数时,静态类的变量指针空,所以会创建一个对象出来,第二次调用就不是空了,直接返回第一次的对象指针(地址)。

  • 相关阅读:
    握手挥手状态(转)
    牛客笔记
    Redis常见面试题
    SpringBoot整合Redis及Redis工具类撰写(转)
    Netty中FastThreadLocal源码分析(转)
    计算机网络各层涉及协议(转)
    计算机小网络小笔记
    数据库
    操作系统提供的接口
    可重入锁和不可重入锁
  • 原文地址:https://www.cnblogs.com/qiwu1314/p/8796496.html
Copyright © 2020-2023  润新知