说我有一个单例类App
,我通过它获取了via的实例:
App& App::get()
{
static App instance;
return instance;
}
根据我的研究,当需要单例时,这显然是获得实例的最佳方法。但是,假设我需要在初始实例化期间传递一次值,例如:
void App::init(bool someValue)
{
static App instance(someValue);
}
我在这个概念上苦苦挣扎的地方是如何通过
get()
方法获取该实例,而不必每次都传递someValue
?过去在
init()
中,我只是使用构造函数创建一个App
实例,传递初始化值并将该实例保存为App类的静态成员,然后get()
将返回该单个实例。我似乎很难弄清楚如何将这种行为转化为新的范例。做到这一点的最佳方法是什么?
最佳答案
好吧,您可能有一个静态指针,它指向init
中的本地静态实例:
// App.hpp
#include <cassert>
class App {
public:
static void init(bool const b) noexcept {
static App ap{b};
_inst = ≈
}
static App& get() noexcept {
assert(_inst);
return *_inst;
}
private:
App(bool const b)
: _b{ b }
{}
bool _b;
static App* _inst;
};
// App.cpp
App* App::_inst = nullptr;
// main.cpp
int main() {
App::init(true);
auto& ap = App::get();
}
关于c++ - 初始化C++ 11风格的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61717851/