我正在阅读Boost
here的weak_ptr
文档,并在开头说:
当对象的最后一个shared_ptr消失而对象是 删除,尝试从weak_ptr获取shared_ptr 引用已删除对象的实例将失败:构造函数 将抛出boost :: bad_weak_ptr类型的异常,并且 weak_ptr :: lock将返回一个空的shared_ptr。
到目前为止,一切都很清楚,然后,2行后说:
weak_ptr操作永远不会抛出异常。
每个陈述是指什么?
答案 0 :(得分:2)
从shared_ptr
构建weak_ptr
可能会引发bad_weak_ptr
例外。 (如果您希望能够对此进行测试,请使用weak_ptr::lock
。)
weak_ptr
对象本身的任何操作都不会抛出。
答案 1 :(得分:2)
weak_ptr
类永远不会抛出任何操作,在内部,当你调用lock()
时发生的事情是它捕获构造函数抛出的异常shared_ptr
(bad_weak_ptr
)的em>然后返回一个空的shared_ptr
。请查看lock()
函数的来源,供您自己确认。
答案 2 :(得分:1)
这意味着如果你在weak_ptr引用的共享实例消失时从weak_ptr构造一个shared_ptr(template<class Y> explicit shared_ptr(weak_ptr<Y> const & r);
),它将抛出异常。
您有两种方法可以从weak_ptr获取shared_ptr:
shared_ptr<T> weak_ptr<T>::lock() const;
如果weak_ptr引用的实例消失,它将返回一个空的shared_ptr实例。