???????
???????????????????????????????????????????????????C++11??????£???C++???????????Singleton??
???????????????????????????Scott Meyer???Effective C++???????????static????????й???local static???????????????????????????????????????????????????Щ????????????????????????????????????е?Singleton????????????????????Singleton????Щ???
?????????
???????????£???????????????д????
template<typename T>
class Singleton
{
public:
static T& getInstance()
{
if (!value_)
{
value_ = new T();
}
return *value_;
}
private:
Singleton();
~Singleton();
static T* value_;
};
template<typename T>
T* Singleton<T>::value_ = NULL;
???????????У???????д??????????????????????????в??????
????????????
???????????????У????浥????д???????race condition?????????γ?????????????????????1?????????????????????????shared variable?????????α????
template<typename T>
class Singleton
{
public:
static T& getInstance()
{
{
MutexGuard guard(mutex_)  // RAII
if (!value_)
{
value_ = new T();
}
}
return *value_;
}
private:
Singleton();
~Singleton();
static T*     value_;
static Mutex  mutex_;
};
template<typename T>
T* Singleton<T>::value_ = NULL;
template<typename T>
Mutex Singleton<T>::mutex_;
???????????????????????????????????????????????????????????ε???getInstance??????????????????????????getInstance??????????????????????????????????DCLд??????????????????????