#ifndef H_SINGLETON_H #define H_SINGLETON_H #include using namespace std; template class SingletonTemplate { protected: SingletonTemplate(); public: virtual ~SingletonTemplate(void); static T* GetInstancePtr(); static T& GetInstance(); static bool release(void); private: static T* mp_singleton; }; template T* SingletonTemplate::mp_singleton = NULL; template SingletonTemplate::SingletonTemplate(void) { //std::cout<<"run Singleton::Singleton(void)"< SingletonTemplate::~SingletonTemplate(void) { //std::cout<<"run Singleton::~Singleton(void)"< T* SingletonTemplate::GetInstancePtr() { if( mp_singleton == NULL ){ mp_singleton = new T(); } return mp_singleton; } template T& SingletonTemplate::GetInstance() { if( mp_singleton == NULL ){ mp_singleton = new T(); } return *mp_singleton; } template bool SingletonTemplate::release(void) { bool rtc = true; if( mp_singleton != NULL ){ delete mp_singleton; mp_singleton = NULL; } return rtc; } #endif