在C ++ 11中,如果我在一个线程中创建一个对象并将其设置为std::atomic<T*>
,是否可以保证构造函数在设置原子变量之前已经完成执行?
具体来说,在下面的代码中,如果“if”语句的计算结果为true,是否保证Widget()构造函数已完成?
std::atomic<Widget*> widget = NULL;
在主题A中:
widget = new Widget();
在主题B中:
if(widget) {
// Do something with widget
}
答案 0 :(得分:5)
简答:是的。
长答案:构造函数的效果在按照5.17 [expr.ass] / 1赋值给widget
之前进行排序“在所有情况下,赋值在值之后排序
计算左右操作数,并在赋值表达式的值计算之前。“。构造函数完成因此发生在任何与widget
的写入同步的widget
读取之前。