создать класс singleTon, используя std :: call_once - PullRequest
1 голос
/ 19 марта 2019

Следующий код является реализацией альтернативного класса singleTon, который использует std::call_once в C++11. По сути, переменная static_instance объявляется статически вместе с static_flag, и после вызова функции getInstance, которая также является статической функцией, я создаю первый и единственный экземпляр mySingle с помощью call_once.

Я был бы рад услышать любые комментарии относительно правильности кода с точки зрения безопасности потока и того, отличается ли его поведение от стандартной реализации c ++ определения статической переменной внутри getinstance.

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;
}
...