您的位置:首页 > 编程语言 > C语言/C++

C++完美实现Singleton模式

2013-10-23 17:14 239 查看
template <class T>
class Singleton
{
public:
static inline T& instance()
{
static T _instance;
return _instance;
}

private:
Singleton(void);
~Singleton(void);
Singleton(const Singleton<T>&);
Singleton<T>& operator= (const Singleton<T> &);
};
typedef Singleton<ServiceManger> SSManger;
int _tmain(int argc, _TCHAR* argv[])
{
SSManger::instance()->Run();
}


把模板类的构造函数放在私有段里了,如果放在protected段里就好得多,因为你的类可以从模板类继承,这样就不再需要你的那个 typedef Singleton<ServiceManger> SSManger;定义了。示例如下:

template <class T>

class Singleton {

public:

static T& instance() {

static T _instance;

return _instance;

}

protected:

Singleton(void) {}

virtual ~Singleton(void) {}

Singleton(const Singleton<T>&); //不实现

Singleton<T>& operator= (const Singleton<T> &); //不实现

};

--------------------------------

下面是一个需要做为单例的类,只需从Singleton继承即可

class Test : public Singleton<Test> {

public:

void foo();

private:

Test();

~Test();

friend class Singleton<Test>;

};

----------------------

这样,别人在使用的时候,只需要写

Test::instance().foo();

而再也不需要写:

Singleton<Test>::instance().foo();

或者

typedef Singleton<Test> STest;

STest::instance().foo();

转自:http://www.cppblog.com/dyj057/archive/2005/09/20/346.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: