zoukankan      html  css  js  c++  java
  • 单例模式的C++实现

    #include <iostream>
    using namespace std;
    
    /* 单例模式:懒汉式
    1、保证该类只有一个实例。
    2、考虑多线程安全
    3、考虑资源释放
    */
    class Lock{    
    public:
        Lock(){    
               //加锁代码
        }
        ~Lock(){
            //开锁代码           
        }
    };
    class Singleton{
        class Garbo{ //辅助类,垃圾回收器
        public:
            ~Garbo(){
                if(Singleton::pInstance != NULL){
                    delete Singleton::pInstance;
                    Singleton::pInstance = NULL;
                }
            }
             
        };
    private:
        static Singleton * pInstance;
        static Garbo garbo; //当程序结束时自动delete pInstance;
        Singleton(){};   //禁止自定义对象
        Singleton(const Singleton & rhs); //禁止拷贝构造对象
        const Singleton & operator=(const Singleton & rhs);
        ~Singleton(){
            cout << "I'm deleted!"<<endl; //防止外部析构
        }
    public:
        static Singleton * getInstance();    
        void display(){
            cout << "other opeartions"<<endl;
        }
    };
    //静态成员初始化
    Singleton* Singleton::pInstance = 0;
    Singleton::Garbo Singleton::garbo;
    
    Singleton * Singleton::getInstance(){
        if(pInstance == NULL){   //懒汉式
            Lock lock;         //资源管理对象:利用局部对象的构造和析构来进行加锁和开锁;
            if(pInstance == NULL){ //这句并非多余s
                pInstance = new Singleton();
            }
        }
        return pInstance;
    }
    int main()
    { 
         
        Singleton *ps =Singleton::getInstance(); 
        ps->display();
         
         
    }

    /*注:关于为何不适用静态成员来实习初始化一次,原因如下:
    1.如果将pInstance定义为静态类成员,即static Singleton Instance,然后在getInstance中返回,这样必须在外部初始化,不属于懒汉式;
    2、如果将pInstance定义为getInstance函数中的局部静态变量,这样只要getInstance不被调用,pInstance就不会有值,但在多线程环境下局部静态变量(特别是对象)能够保证初始化一次仍然不确定
    */

    参考文献

  • 相关阅读:
    起步学习软件开发(.Net 方向)的指导
    Lesktop开源JS控件库
    软件岗位职责
    asp.net 获取网站根目录总结
    微软是怎样做测试的
    打造WebIM
    CodeSmith 系列一
    Crack .NET
    Visual Studio IDE 实用小技巧3
    程序员公司的选择
  • 原文地址:https://www.cnblogs.com/gaoyanqing/p/4745133.html
Copyright © 2011-2022 走看看