zoukankan      html  css  js  c++  java
  • 设计模式:单例模式

    一.作用

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

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

    二.简单式

    • 直接在类里面进行生成静态对象,但是这样可能会释放多次
    • 饿汉:需要开辟内存
    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地址一样
  • 相关阅读:
    jsonp的实现原理和缺点
    vue $set的使用初了解
    js将多维数组转换为一维数组
    微信小程序之页面打开数量限制
    ZOJ 1463 Brackets Sequence
    CSUOJ 1248 非变性聚丙烯酰胺凝胶电泳
    ZOJ 1524 Supermarket
    POJ 1012 Joseph
    ZOJ 1276 Optimal Array Multiplication Sequence
    POJ 1742 Coins
  • 原文地址:https://www.cnblogs.com/k5bg/p/11063339.html
Copyright © 2011-2022 走看看