方法一(C++11,直接初始化):
class NoCopyable
{
public:
NoCopyable(){}
private:
NoCopyable(const NoCopyable&);
NoCopyable& operator=(const NoCopyable&);
};
class CSingleton : public NoCopyable
{
public:
static CSingleton* instance();
~CSingleton(){}
private:
CSingleton(){}
};
CSingleton* CSingleton::instance()
{
static CSingleton ins;
return &ins;
}
方法二(线程库,call_once):
static std::once_flag oc; // 用于call_once的局部静态变量
Singleton* Singleton::m_instance;
Singleton* Singleton::getInstance() {
std::call_once(oc, [&] () { m_instance = newSingleton(); });
return m_instance;
}