【发布时间】:2015-11-17 12:17:52
【问题描述】:
我试图了解template <class U> void shared_ptr::reset (U* p); 函数的异常安全性。 In the documentation我发现了这个:
此外,调用此函数具有与 if 相同的副作用 shared_ptr 的析构函数在其值更改之前被调用(包括 如果此 shared_ptr 是唯一的,则删除托管对象)。
所以,我们可以假设析构函数不会抛出。但是如果operator new 抛出怎么办?那么我们将拥有shared_ptr 的什么状态?是否保持不变?
【问题讨论】:
-
This 更具描述性:“ std::bad_alloc 如果无法获得所需的额外内存。可能会为其他错误抛出实现定义的异常。如果发生异常,则调用 delete ptr 。 "
-
哪个
operator new?调用分配新控制块的那个? -
作为一个小的旁注首选cppreference.com 而不是 cplusplus.com。 Cplusplus.com has many small mistakes and some bad examples.
标签: c++ shared-ptr