singleton pattern的一个模板实现, 适用于单线程, 并且提供了Release方法

/**
*    \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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值