std::shared_ptr如何提供noexcept operator=?当然,如果此shared_ptr是最后一个ojit_code,则它将必须销毁其内容,并且不能保证该对象的析构函数不会抛出,或者最初使用的自定义删除程序也不会抛出。

最佳答案

对我来说似乎是一个缺陷,尽管在active issues list中找不到一个缺陷(尽管#2104相似)。

  • 对于[C++11: 20.7.2.2.3/1],分配被定义为与shared_ptr(r).swap(*this)等效;
  • 但对于[C++11: 20.7.2.2.2]~shared_ptr本身不是noexcept

  • 除非我误解了noexcept的工作方式,否则肯定是错误的。

    另外,它可能仅表示赋值运算符仅在基础对象类型或删除器类型都没有破坏时才可用,尽管即使在这种情况下,标准措辞中缺少任何翔实的注释也使我认为这不太可能。

    关于c++ - shared_ptr如何提供noexcept分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13778664/

    10-14 05:34