标签:des ar 使用 strong sp div on log amp
Singleton模式的特点:
一、指针实现方式
//Singleton.h class Singleton { public: static Singleton* Instance(); protected: Singleton(); private: static Singleton* _instance; }; //Singleton.cpp Singleton* Singleton::_instance = 0; Singleton::Singleton() { cout << "Singleton...." << endl; } Singleton* Singleton::Instance() { if (_instance == 0) { _instance = new Singleton(); } return _instance; } //main.cpp #include "Singleton.h" int main() { Singleton* sgn = Singleton::Instance(); //sgn->... }
这是Singleton最常见的一种实现方式。优缺点列举如下:
二、引用实现方式
这种方式是《Modern C++ Design》一书中给出的。
//GameSoundMgr.h class GameSoundMgr { public: static GameSoundMgr& GetInstance(); protected: GameSoundMgr(); GameSoundMgr(const GameSoundMgr&); GameSoundMgr& operator=(const GameSoundMgr&); ~GameSoundMgr(); }; //GameSoundMgr.cpp GameSoundMgr& GameSoundMgr::GetInstance() { static GameSoundMgr tGameSoundMgr; return tGameSoundMgr; }
其优缺点列举如下:
三、Singleton Holder
在你的系统中,有可能要用到多个Singleton对象,比如一个国家,主席只能有一个,同样,国防部长也只能有一个,那怎么办呢?《Modern C++ Design》还给我们提供了一种Singleton Holder,通过template的应用,批量生产Singleton。
//SingletonHolder.h template<class MyClass> class SingletoHolder { public: static MyClass& GetInstance(); }; //SingletonHolder.cpp #include "SingletonHolder.h" MyClass& SingletonHolder::GetInstance() { static MyClass tMyClass; return tMyClass; } //class GameSoundSystem; typedef SingletonHolder<GameSoundSystem> SingleSoundSytem; GameSoundSystem& mySoundSys = SingleSoundSytem ::GetInstance();
以上技术的详情,请参见《Modern C++ Design》一书。另外在我的博客另外一篇文章,也有一个logSingleton的小
标签:des ar 使用 strong sp div on log amp
原文地址:http://www.cnblogs.com/profession/p/4048764.html