#ifndef _singleton_h_ #define _singleton_h_ #include "AmThread.h" template class singleton : public T { singleton() : T() {} ~singleton() {} public: static singleton* instance() { _inst_m.lock(); if(!_instance) { _instance = new singleton(); } singleton* ret = _instance; _inst_m.unlock(); return ret; } static void dispose() { _inst_m.lock(); _instance->dispose(); delete _instance; _instance = NULL; _inst_m.unlock(); } private: static singleton* _instance; static AmMutex _inst_m; }; template singleton* singleton::_instance = NULL; template AmMutex singleton::_inst_m; #endif