- 论坛徽章:
- 0
|
本帖最后由 xishuaiya 于 2010-10-28 20:28 编辑
- /****************************************************************
- 说明:本程序实现了Singleton类
- 思路:吧你需要实现单例的类的构造函数、=操作符、拷贝构造函数都声明为私有的。
- 这就实现了禁止构造,禁止拷贝。然后把Singleton类声明为该类的友元函数,
- 把单例类的实例化交给Singleton来完成。
- ********************************************************************************/
-
- #include <iostream>
- #include <memory>
- using namespace std;
- //Singleton<T>类负责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类是单例类,它的它的所有构造函数、赋值操作符都被设置为私有
- //并把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();
- }
复制代码 |
|