/**
* \file singleton.h
* \date 06-09-2014
* \author GaoYang
* \brief singleton pattern的一个模板实现, 适用于单线程, 并且提供了Release方法
* \par Revision History(No.->date->by->actions)
* \par
* #001....06-09-2014....GaoYang....
*/
#pragma once
#define DECLARE_SINGLETON_WITH_RELEASE(type) \
friend class SingletonWithRelease<type>; \
protected: \
type(void); \
virtual ~type(void); \
type(const type&){} \
public:
template<class T>
class SingletonWithRelease
{
public:
static T* Instance();
static void Release();
protected:
SingletonWithRelease()
{
}
virtual ~SingletonWithRelease()
{
}
private:
SingletonWithRelease(const SingletonWithRelease&)
{
}
static T* pInstance_;
};
template <class T>
T* SingletonWithRelease<T>::pInstance_;
template<class T>
inline T* SingletonWithRelease<T>::Instance()
{
// if (NULL == pInstance_)
{
// lock here
if (NULL == pInstance_)
{
pInstance_ = ::new T;
}
// unlock here
}
return pInstance_;
}
template<class T>
inline void SingletonWithRelease<T>::Release()
{
if (NULL != pInstance_)
{
delete pInstance_;
pInstance_ = NULL;
}
}
singleton pattern的一个模板实现, 适用于单线程, 并且提供了Release方法
最新推荐文章于 2022-06-13 03:37:51 发布