- 論壇徽章:
- 0
|
本帖最后由 xishuaiya 于 2010-10-28 20:28 編輯
- /****************************************************************
- 說明:本程序?qū)崿F(xiàn)了Singleton類
- 思路:吧你需要實現(xiàn)單例的類的構(gòu)造函數(shù)、=操作符、拷貝構(gòu)造函數(shù)都聲明為私有的。
- 這就實現(xiàn)了禁止構(gòu)造,禁止拷貝。然后把Singleton類聲明為該類的友元函數(shù),
- 把單例類的實例化交給Singleton來完成。
- ********************************************************************************/
-
- #include <iostream>
- #include <memory>
- using namespace std;
- //Singleton<T>類負(fù)責(zé)T類的實例化,并且只實例化一個對象
- template<typename T>
- class Singleton
- {
- public:
- static T* GetInstance()
- {
- if(0 == m_inst.get())
- m_inst.reset(new T);
- return m_inst.get();
- }
- protected:
- Singleton(){}
- private:
- static auto_ptr<T> m_inst;
- };
- template<typename T>
- auto_ptr<T> Singleton<T>::m_inst;
- //my類是單例類,它的它的所有構(gòu)造函數(shù)、賦值操作符都被設(shè)置為私有
- //并把Singleton<T>作為友元類;
- class my
- {
- public:
- void print()
- {
- cout << "data = " << data << endl;
- }
- void Set(int d) {
- data = d;
- }
- ~my(){}
- private:
- my(){data = 1;}
- my(my& );
- my operator=(my& );
-
- private:
- int data;
- friend class Singleton<my>;
- };
- void main()
- {
- my* inst = Singleton<my>::GetInstance();
- inst->Set(5);
- inst->print();
- my* inst2 = Singleton<my>::GetInstance();
- inst2->print();
- inst2->Set(3);
- inst->print();
- }
復(fù)制代碼 |
|