怎么能std::shared_ptr提供noexcept operator=?当然,如果这shared_ptr是最后一个,那么它将不得不销毁其内容,并且它不能保证该对象的析构函数不会抛出,或者最初使用的自定义删除器不会抛出.
看起来像是一个缺陷,虽然不是我能在活动问题列表中找到的(尽管#2104 类似).
Per [C++11: 20.7.2.2.3/1],赋值被定义为等同于shared_ptr(r).swap(*this);
但是,每[C++11: 20.7.2.2.2],~shared_ptr本身不是noexcept.
除非我误解了工作方式,否则noexcept这一定是错误的.
或者,它可能只是意味着赋值运算符仅在底层对象类型和删除器类型都没有被破坏时才可用,尽管在这种情况下,标准措辞中缺少任何信息性注释使我认为这不太可能.
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |