C++ 为什么存储到原子唯一\u ptr会导致崩溃?
代码在i7-4790处理器(x86-64)上的VC++2013(v120)下编译,没有问题C++ 为什么存储到原子唯一\u ptr会导致崩溃?,c++,pointers,atomic,C++,Pointers,Atomic,代码在i7-4790处理器(x86-64)上的VC++2013(v120)下编译,没有问题 intmain() { std::原子p; p、 商店(标准:使_独一无二(5)); } 一旦main()返回,我就会崩溃: 表达式:\块\类型\有效(pHead->nBlockUse) 发生了什么事?您不能用std::unique\ptr实例化std::atomic std::atomic可以用任何类型T实例化。std::atomic既不可复制也不可移动 而且一张照片也不是微不足道的 该类满足和的要求
intmain()
{
std::原子p;
p、 商店(标准:使_独一无二(5));
}
一旦main()
返回,我就会崩溃:
表达式:\块\类型\有效(pHead->nBlockUse)
发生了什么事?您不能用
std::unique\ptr
实例化std::atomic
std::atomic可以用任何类型T实例化。std::atomic既不可复制也不可移动
而且一张照片也不是微不足道的
该类满足和的要求,但不满足或的要求
您可以使用具有什么编译器和库版本的?什么是CPU架构?@BenVoigt VC++2013(v120)CPU:i7-4790处理器(x86-64)谢谢你的回答。因此,我是否正确地假设这里的问题是VC++2013没有为
std::atomic
的无效类型T
执行静态断言?我认为没有任何要求它检查T
是否正确TriviallyCopyable@user2296177我不认为这是一个bug,因为标准要求T
必须是琐碎是可复制的,所以负担在你身上,你给它一个正确的类型。这是真的。我仍然认为,实现中的静态断言将非常有助于防止类型的误用,即使标准不要求这样做。谢谢你的帮助。
int main()
{
std::atomic<std::unique_ptr<int>> p;
p.store(std::make_unique<int>(5));
}