You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.2 KiB
C

1 month ago
/**
* @file WSingletonHandler.h
* @brief ͨ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>ģʽ
* @remark ʹ<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 1> <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>Ϊprivate<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
* 2> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WSingletonHandler<T>Ϊ<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
* 3> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ַ<EFBFBD><EFBFBD>ʺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AfxGetT()<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>WSingletonHandler<T>::GetInstance()<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>WSingletonHandler<T>::GetInstance()<EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD>
* 4> <EFBFBD>ڲ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @author ɳĮ<EFBFBD><EFBFBD>ѻ
* @time 2009-12-25
*/
#pragma once
#include "WGuardLock.h"
#include <memory>
namespace wuya
{
/** @brief ͨ<>õ<EFBFBD><C3B5><EFBFBD>ģʽ*/
template<class T>
class WSingletonHandler : public T
{
public:
/** @brief <20><>ȡΨһ<CEA8><D2BB><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
static T* GetInstance()
{
if(m_InstancePtr.get() == NULL)
{
m_InstancePtr.reset(new T);
}
return m_InstancePtr.get();
}
private:
WSingletonHandler(void);
~WSingletonHandler(void);
WSingletonHandler(const WSingletonHandler& singletonHandle);
WSingletonHandler& operator=(const WSingletonHandler& singletonHandle);
private:
static auto_ptr<T> m_InstancePtr;
};
template<class T>
auto_ptr<T> WSingletonHandler<T>::m_InstancePtr;
}