make_pair 是原子的吗?

Is make_pair atomic?

std::pair<Object, OtherObject*> currentData;

void OnCallback()
{
    Object object = getObject();
    OtherObject* otherObject = new OtherObject();
    currentData = std::make_pair(object, otherObject);
}

make_pair 是原子的吗? make_pair 会将字段从其 return 值复制或移动到 currentData 吗?如果我有另一个线程访问 currentData 的值,是否有可能 currentData 的值在被访问时不完整?

遗憾的是,我在 make_pair 的标准文档中没有看到任何相关信息。

make_pair() 是否是原子无关紧要。

If I have another thread accessing the value of currentData, is there any potential that currentData's value will be incomplete when it's accessed?

这里唯一的问题是std::pair的赋值运算符是否是原子的,因为它决定了赋值操作是否是线程安全的。赋值发生之前发生的事情,以及被赋值的值是如何产生的,与赋值操作的原子性完全无关。

这个赋值操作不是原子的,也不是线程安全的。