/** * @file WSingletonHandler.h * @brief 通用单例模式 * @remark 使用方法: * 1> 需要做为单例类,构造函数位置为private;拷贝构造函数和赋值操作符只定义,不实现 * 2> 该类设置WSingletonHandler为友元类 * 3> 增加全局访问函数接口,比如AfxGetT(),返回T*,函数实现中调用WSingletonHandler::GetInstance()返回指针 * 当然,此步可以不做,每次调用WSingletonHandler::GetInstance()获取指针 * 4> 内部使用智能指针保存单例指针,不需要对内存进行删除操作 * @author 沙漠乌鸦 * @time 2009-12-25 */ #pragma once #include "WGuardLock.h" #include namespace wuya { /** @brief 通用单例模式*/ template class WSingletonHandler : public T { public: /** @brief 获取唯一访问指针 */ 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 m_InstancePtr; }; template auto_ptr WSingletonHandler::m_InstancePtr; }