C++ 单例模式 std::call_once实现

class Singleton {
public:
	static Singleton* getInstance() {
		static std::once_flag onceFlag; // 必须是静态的
		std::call_once(onceFlag, [&] {m_instance = new Singleton(); }); // 只会调用一次
		return m_instance;
	}
	
private:
	Singleton() {} //私有构造函数,不允许使用者自己生成对象,但是必须要实现
	Singleton(const Singleton& other) = delete;
	Singleton& operator = (const Singleton& other) = delete;

private:
	static Singleton* m_instance; //静态成员变量 
};

Singleton* Singleton::m_instance = nullptr; //静态成员需要先初始化

你可能感兴趣的:(Design,Pattern)