【发布时间】:2021-05-24 13:07:20
【问题描述】:
标准的做法是什么?
让我们有一个class A,它有一个数据成员std::unique_ptr<Impl> m_impl。
例如,类 A 的移动赋值运算符的内容应该是这样的吗?
m_impl = std::move(other.m_impl);
还是这个?
*m_impl = std::move(*other.m_impl);
第一种情况比第二种更有效。但这会引发一些问题。
移动后,other的m_impl数据成员为nullptr。被移动的对象应该在使用时抛出异常,还是让用户由于取消引用 nullptr 而遇到运行时错误?
对于线程安全的类,这也意味着所有 m_impl 的使用都需要同步。我不确定调用std::unique_ptr 的移动构造函数/赋值运算符是否是线程安全的。
【问题讨论】:
标签: c++