【发布时间】:2017-12-07 13:46:38
【问题描述】:
我正在使用一个函数静态变量,我想通过调用 setter 来初始化一次:
void foo() {
static Obj obj;
obj.setName("name"); // this should be called once
// use obj
}
我不希望 setter 被多次调用,这也是由于多线程问题,并且我无法向 Obj 添加构造函数,因为我不拥有代码。这是否合理且线程安全:
void foo() {
static Obj obj = []() {
Obj o;
o.setName("name");
return o;
}();
// use obj
}
【问题讨论】:
-
为什么是所有东西的二传手?为什么它不能有一个合适的c'tor?
-
为什么不使用构造函数:
static Obj obj("name"); -
我忘了说,那不是我的代码,我不拥有 Obj。我将编辑问题
-
可能会添加第二个类,用于初始化 Obj,例如
static ObjSet objset(obj, "name");ObjSet 将初始化 obj。我想这应该是安全的 -
但是如果
obj在其名称设置之前可能被其他线程使用,那么您可能会遇到问题
标签: c++ multithreading c++11 static