1. Singleton.h文件
- /*
- * Singleton.h
- */
-
- #ifndef SINGLETON_H_
- #define SINGLETON_H_
-
- #include <assert.h>
- template <typename T> class Singleton
- {
- protected:
- static T* mSingleton;
- public:
- Singleton()
- {
- assert(!mSingleton);
- mSingleton=static_cast< T*>(this);
- }
- ~Singleton()
- {
- assert(mSingleton);
- delete mSingleton;
- mSingleton=0;
- }
- static T* getSingletonPtr()
- {
- assert(!mSingleton);
- return mSingleton;
- }
- static T& getSingleton()
- {
- assert(!mSingleton);
- return *mSingleton;
- }
- };
- #endif /* SINGLETON_H_ */
2. 類SubClass繼承並實例化模板類Singleton
- /*
- * SubClass.h
- */
- #ifndef SUBCLASS_H_
- #define SUBCLASS_H_
- #include "Singleton.h"
- #include <iostream>
- using namespace std;
- class SubClass:public Singleton<SubClass>
- {
- public:
- SubClass();
- virtual ~SubClass();
- inline void Show()
- {
- static int s=0;
- s++;
- cout<<"s===="<<s<<endl;
- }
- };
- #endif /* SUBCLASS_H_ */
-
-
-
- /*
- * SubClass.cpp
- */
- #include "SubClass.h"
- template<> SubClass* Singleton<SubClass>::mSingleton=0;
- SubClass::SubClass()
- {
- }
- SubClass::~SubClass()
- {
- }
3. 使用函數SubClass::Show()
#include "SubClass.h"
SubClass::getSingletonPtr()->Show();