为什么商店的原子unique_ptr导致崩溃?

时间:2015-10-15 16:12:59

标签: c++ pointers atomic

代码在i7-4790处理器(x86-64)上的VC ++ 2013(v120)下编译没有问题。

int main()
{
    std::atomic<std::unique_ptr<int>> p;
    p.store(std::make_unique<int>(5));
}

一旦main()返回,我就会崩溃:

  

表达式:_BLOCK_TYPE_IS_VALID(pHead-&gt; nBlockUse)

发生了什么?

1 个答案:

答案 0 :(得分:11)

您无法使用std::atomic实例化std::unique_ptrcppreference

  

std :: atomic可以用任何TriviallyCopyable类型实例化.std :: atomic既不可复制也不可移动。

std::unique_ptr不是TriviallyCopyable

  

该课程符合MoveConstructibleMoveAssignable的要求,但不符合CopyConstructibleCopyAssignable的要求。

您可以使用std::shared_ptr

free functions defined to allow you to have atomic stores and loads