一個單例模式的實現
阿新 • • 發佈:2018-11-03
歡迎大家點評,這是個人寫的一個單例模板
#pragma once //單例模板 #include <windows.h> class CrsLock { public: CrsLock(){ InitializeCriticalSection(&m_crs); } ~CrsLock(){ DeleteCriticalSection(&m_crs); } void Enter() { EnterCriticalSection(&m_crs); } void Leave() { LeaveCriticalSection(&m_crs); } private: CRITICAL_SECTION m_crs; }; template<class T> class MMSingleton{ public: static T& Instance(){ if (!m_pT){ m_lock.Enter(); if (!m_pT){ m_pT = new T; } m_lock.Leave(); } return *m_pT; } static void FreeInstance(){ if (m_pT){ m_lock.Enter(); if (m_pT){ delete m_pT; m_pT = NULL; } m_lock.Leave(); } } protected: static T* m_pT; static CrsLock m_lock; }; template<class T> T* MMSingleton<T>::m_pT = NULL; template<class T> CrsLock MMSingleton<T>::m_lock;