记得从前看到过有兄弟写的C++的单例模板,代码量相当多,什么自旋锁啥的都用上了。代码复杂到我看的兴趣都没有,应该不需要那样的,我贴个自己的单例模板吧。
#ifndef _SINGLETON_TEMPLATE_H_
#define _SINGLETON_TEMPLATE_H_
template<class T>
class SingleTon
{
public:
static T & GetInstance()
{
static T t;
return t;
}
protected:
SingleTon(){}
SingleTon(const SingleTon & src){}
~SingleTon(){}
};
#endif
这个应该足够简单了,但也还是有些缺陷。严格来说在多线程环境下可能会有问题。需要确保第一次调用的时候的唯一性。所以还有个为了适应多线程的改版。
#ifndef _SINGLETON_TEMPLATE_H_
#define _SINGLETON_TEMPLATE_H_
template<class T>
class SingleTon
{
public:
static T & GetInstance()
{
return t;
}
protected:
SingleTon(){}
SingleTon(const SingleTon & src){}
~SingleTon(){}
static T t;
};
template<class T>
T SingleTon<T>::t;
#endif
凡事不能完美,这个版本要说不足的话就是运行主程序前会花时间构造对象。