通过设计,std::mutex既不能移动,也不能复制。这意味着A持有互斥量的类将不会收到default-move-constructor。如何使这种类型A以线程安全的方式移动?
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
鉴于似乎没有一个很好的,干净的,简单的方法来回答这个问题-我认为安东的解决方案是正确的,但肯定值得商,,除非出现更好的答案,否则我建议将此类放在堆上并照看它通过std::unique_ptr:
auto a = std::make_unique<A>();
它现在是完全可移动的类型,并且在发生移动时在内部互斥锁上处于锁定状态的任何人仍然是安全的,即使它是否是一件好事也存在争议
如果您需要复制语义,请使用
auto a2 = std::make_shared<A>();
- 3 回答
- 0 关注
- 509 浏览
添加回答
举报
0/150
提交
取消