标签: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