前面讨论了 std::weak_ptr , 这里说一下使用 weak_ptr 需要注意的地方:不正确地使用weak_ptr可能会导致奔溃。
因为weak_ptr的lock()函数是noexcept的:
std::shared_ptr
lock() const noexcept;
所以如果不加判断就直接 解引用lock的返回值,可能会导致崩溃:
#include#include #include int main(int argc,char** agev) { std::weak_ptr wp; { std::shared_ptr sp = std::make_shared (0); *sp = 10; std::cout << *sp << std::endl; wp = sp; } std::cout << *(wp.lock()) << std::endl; //wp指向的sp已经释放,这里会段错误 //正确写法 if(!wp.expired()){ std::cout << *(wp.lock()) << std::endl; } }


![[modern c++] std::weak [modern c++] std::weak](http://www.mshxw.com/aiimages/31/1010429.png)
