使用std :: call_once创建singleTon类

时间:2019-03-19 07:36:12

标签: c++ c++11 design-patterns singleton std

以下代码是在std::call_once中使用C++11的替代singleTon类的实现。基本上,变量static_instancestatic_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;
}

0 个答案:

没有答案