这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比如你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等。你希望这个类在整个系统中只能出现一个实例。
调用pthread_once()实现了一个线程安全的版本:
代码:
template <class T> class Singleton { public: static T& instance() { pthread_once(&ponce_,&Singleton::init); return *value_; } static void init()//加了一层封装,适应不同类型的初始化函数 { value_ = new T(); } private: Singleton(); ~Singleton(); static pthread_once_t ponce_; static T * value_; }; template <class T> pthread_once_t Singleton<T>::ponce_=PTHREAD_ONCE_INIT;//Linux下初始化为0; template <class T> T* Singleton<T>::value_=NULL;
原文地址:http://blog.csdn.net/hustyangju/article/details/46607967