Следующий код является реализацией альтернативного класса 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;
}