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