以下代码是在std::call_once
中使用C++11
的替代singleTon类的实现。基本上,变量static_instance
与static_flag
一起被静态声明,并且一旦调用getInstance
函数(也是静态函数),我就使用call_once创建mySingle的第一个也是唯一的实例。
我很高兴听到关于线程安全方面的代码正确性的任何评论,以及它的行为是否与在getinstance
中定义静态变量的标准c ++实现不同。
mySingle.h
class mySingle
{
static mySingle *static_instance;
static std::once_flag static_flag;
public:
mySingle();
virtual ~mySingle();
static mySingle* getInstance();
};
mySingle.cpp
#include "mySingle.h"
mySingle * mySingle::static_instance;
std::once_flag mySingle::static_flag;
mySingle::mySingle(){}
mySingle::~mySingle(){}
mySingle* mySingle::getInstance()
{
std::call_once(g_flag, [&]() { static_instance = new mySingle(); });
return (mySingle*) static_instance;
}