版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012532305/article/details/50596132
欢迎大家点评,这是个人写的一个单例模板
#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;