線程安全的單例模式實現:
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); //用lock實現線程安全,用資源管理類,實現異常安全 //使用資源管理類,在拋出異常的時候,資源管理類對象會被析構,析構總是發生的無論是因爲異常拋出還是語句塊結束。 if(pInstance == NULL) { pInstance = new Singleton(); } } return pInstance; } /*class Singleton { private: static Singleton* instance; Singleton(); Singleton(const Singleton &s); Singleton& operator=(const Singleton &s); public: static Singleton* GetInstance() { static Singleton instance; return &instance; } };*/