#include <iostream> using namespace std; class testSingleton; template <typename T> class singleton{ friend class testSingleton; public: static T* Instance() { if (m_pInstance==NULL) m_pInstance = new T; return m_pInstance; } private: class Garbo { public: ~Garbo() { if (singleton<T>::m_pInstance) delete singleton<T>::m_pInstance; } }; singleton() { } static Garbo garbo; static T* m_pInstance; }; template<class T> T* singleton<T>::m_pInstance = NULL; class testSingleton : public singleton<testSingleton> { public: void setVal(int n) { cnt = n; } int getVal() { return cnt; } private: int cnt; }; int main() { testSingleton *p = singleton<testSingleton>::Instance(); p->setVal(222); cout << p->getVal() << endl; testSingleton *pp = singleton<testSingleton>::Instance(); pp->setVal(111); cout << pp->getVal() << endl; return 0; }