常见的设计模式-单例模式

class Singleton{
private:
  Singleton() {}
  static Singleton *m_pInstance;
public:
  static Singleton *GetInstance()
  {
    if(m_pInstance == null)
      m_pInstance = new Singleton();
    return m_pInstance;
  }
}
class Lock
{
private:
   CCriticalSection m_cs;
public:
    Lock(CCriticalSection cs):m_cs(cs)
    {
        m_cs.Lock();
    }
    ~Lock()
    {
        m_cs.UnLock();
    }    
}

class Singleton
{
private:
    Singleton();
    Singleton(const Singleton &);
    Singleton &operator=(const Singleton&);
public:
    static Singleton *Instantialize();
    static Singleton *pInstance;
    static CCriticalSection cs;
}
Singleton* Singleton::pInstance = 0;

Singleton* Singleton::Instantialize()
{
    if(pInstance == NULL)
    {   //double check
        Lock lock(cs);
        if(pInstance == NULL)
        {
            pInstance = new Singleton();
        }
    }
    return pInstance;
}
 

 

posted on 2020-09-25 14:10  123_123  阅读(56)  评论(0编辑  收藏  举报