zoukankan      html  css  js  c++  java
  • 【转】C++ 单例模式

    http://blog.csdn.net/hackbuteer1/article/details/7460019

     单例的一般实现比较简单,下面是代码和UML图。由于构造函数是私有的,因此无法通过构造函数实例化,唯一的方法就是通过调用静态函数GetInstance。

     UML图:

    考虑到线程安全、异常安全,需要加锁,可以做以下扩展

    1. class Lock  
    2. {  
    3. private:         
    4.     CCriticalSection m_cs;  
    5. public:  
    6.     Lock(CCriticalSection  cs) : m_cs(cs)  
    7.     {  
    8.         m_cs.Lock();  
    9.     }  
    10.     ~Lock()  
    11.     {  
    12.         m_cs.Unlock();  
    13.     }  
    14. };  
    15.   
    16. class Singleton  
    17. {  
    18. private:  
    19.     Singleton();  
    20.     Singleton(const Singleton &);  
    21.     Singleton& operator = (const Singleton &);  
    22.     static Singleton *pInstance; 
    23.   
    24. public:  
    25.     static Singleton *Instantialize();  
    26.     static CCriticalSection cs;  
    27. };  
    28.   
    29. Singleton* Singleton::pInstance = 0;  
    30.   
    31. Singleton* Singleton::Instantialize()  
    32. {  
    33.     if(pInstance == NULL)  
    34.     {   //double check  
    35.         Lock lock(cs);           //用lock实现线程安全,用资源管理类,实现异常安全  
    36.                                         
    37.         //使用资源管理类,在抛出异常的时候,资源管理类对象会被析构,析构总是发生的无论是因为异常抛出还是语句块结束。  
    38.         if(pInstance == NULL)  
    39.         {  
    40.             pInstance = new Singleton();  
    41.         }  
    42.     }     --》 //my注释:这里的lock类为局部变量,在这里会被析构,即会被解锁。
    43.     return pInstance;  
    44. }  
  • 相关阅读:
    Hive的安装搭建(二)
    Hive的基本介绍(一)
    HADOOP之HDFS使用idea练习MapReduce(八)
    HADOOP之HDFS使用idea操作MapReduce(七)
    HADOOP之HDFS增加MapReduce(六)
    HADOOP之HDFS用idea操作(五)
    HADOOP之HDFS环境搭建(四)
    HADOOP之HDFS环境搭建(三)
    HADOOP之HDFS环境搭建(二)
    HADOOP之HDFS环境搭建(一)
  • 原文地址:https://www.cnblogs.com/maxpak/p/4487437.html
Copyright © 2011-2022 走看看