std::call_once()的介绍
C++11引入std::call_once()函数,该函数的第二个参数是一个函数名a(),std::call_once功能是能够保证函数a()只被调用一次,该函数可以创建单例对象,具备互斥量的能力,这个函数比互斥量消耗的资源更少,call_once()需要与一个标记结合使用,这个标记std::once_flag,其实它是一个结构,call_once()就是通过这个标记来决定对应函数a()是否执行,调用call_once()成功后,call_once()就把这个标记设置为一种已调用状态,只要once_flag被设置为“以调用”状态,那么对应的函数a()就不会再被执行了。
std::call_once的使用
std::once_flag g_flag;
static std::once_flag oc; // 用于call_once的局部静态变量
Singleton* Singleton::m_instance;
Singleton* Singleton::getInstance() {
std::call_once(oc, [&] () { m_instance = newSingleton(); });
return m_instance;
}