#ifndef __TSINGLETON_H__
#define __TSINGLETON_H__
#pragma once
template<class T>
class TSingleton
{
private:
TSingleton()
{
}
~TSingleton()
{
}
public:
static T* GetInstance()
{
_SingletonLock.Lock();
if(_SingleInstance == NULL)
{
_SingleInstance = new T;
}
_SingletonLock.Unlock();
return _SingleInstance;
}
static void FreeInstance()
{
_SingletonLock.Lock();
if(_SingleInstance != NULL)
{
delete _SingleInstance;
_SingleInstance = NULL;
}
_SingletonLock.Unlock();
}
private:
static T* _SingleInstance;
class CSingletonLock
{
public:
CSingletonLock()
{
::InitializeCriticalSection(&m_csSingletonLock);
}
~CSingletonLock()
{
::DeleteCriticalSection(&m_csSingletonLock);
}
void Lock()
{
::EnterCriticalSection(&m_csSingletonLock);
}
void Unlock()
{
::LeaveCriticalSection(&m_csSingletonLock);
}
operator CRITICAL_SECTION()
{
return m_csSingletonLock;
}
private:
CRITICAL_SECTION m_csSingletonLock;
};
static CSingletonLock _SingletonLock;
};
template<class T>
T* TSingleton<T>::_SingleInstance = NULL;
template<class T>
typename TSingleton<T>::CSingletonLock TSingleton<T>::_SingletonLock;
#endif // __TSINGLETON_H__
单例类(做个记号,未测试)
最新推荐文章于 2024-09-20 18:36:27 发布