• 设计模式:单例模式


    一.作用

    • 不能通过构造函数构造,否则就能够实例化多个,构造函数需要私有声明
    • 保证只能产生一个实例

    用处:比如程序只能有一个日志系统,只能有一个管理器等

    二.简单式

    • 直接在类里面进行生成静态对象,但是这样可能会释放多次
    • 饿汉:需要开辟内存
    class CSingleton{
    
    public:
        static CSingleton* GetInstance(){
            if(m_pInstance==NULL){              //m_pInstance==nullptr
                m_pInstance=new CSingleton();
            }
            return m_pInstance;
        }
    
    private:
        CSingleton(){}
        ~CSingleton(){
            if(Singleton::local_instance!=nullptr){
                delete Singleton::local_instance;
            }
        }
        static CSingleton* m_pInstance;
    
    };
    
    CSingleton* CSingleton::m_pInstance=NULL;
    
    
    //或者
    class CSingleton{
    
    public:
        static CSingleton* GetInstance(){
            return m_pInstance;
        }
    
    private:
        CSingleton(){}
        ~CSingleton(){
            if(Singleton::local_instance!=nullptr){
                delete Singleton::local_instance;
            }
        }
        static CSingleton* m_pInstance;
    
    };
    
     CSingleton* CSingleton::m_pInstance=new CSingleton();;
    //调用
    CSingleton* p1=CSingleton::GetInstance();
    CSingleton* p2=CSingleton::GetInstance();
    //p1和p2地址一样

    三.完整式

    • 在多线程下可能会new两次,所以直接返回静态对象的地址,就不用开辟内存释放
    • 懒汉:没有内存操作
    class Singleton{
    
    private:
        static Singleton* local_instance;
    
        Singleton(){}
        ~Singleton(){}
    
    public:
        static Singleton* getInstance(){
            static Singleton local;
            return &local;
        }
    
            //或者
            static Singleton& getInstance(){
                    static Singleton local;
                    return local;
            }
    
    };
    //调用
    Singleton* p1=Singleton::getInstance();
    Singleton* p2=Singleton::getInstance();
    //p1和p2地址一样
  • 相关阅读:
    编写高质量代码 :Web前端开发修炼之道(读书笔记)
    Cordova开发学习笔记
    C++面试总结
    深信服社招Linux岗位一面记录
    一次软件开发不问技术的面试
    面试总结2
    剑指offer 学习笔记(一):二维数组中的查找
    关于思维习惯问题
    ajax的使用(使用json格式提交给服务端)
    es6-13 类与对象
  • 原文地址:https://www.cnblogs.com/k5bg/p/11063339.html
Copyright © 2020-2023  润新知