似乎有两种方法可以暂时获取由weak_ptr
指向的资源的所有权:
- 使用
lock()
- 将
weak_ptr
传递给shared_ptr
构造函数
这两种方法都会产生一个shared_ptr
,如果weak_ptr
为空,则锁定返回nullptr
,而shared_ptr
构造函数则会抛出异常。
那么问题来了:什么情况下应该使用其中一种?是否有与此相关的一般准则或最佳实践?
似乎有两种方法可以暂时获取由weak_ptr
指向的资源的所有权:
lock()
weak_ptr
传递给shared_ptr
构造函数这两种方法都会产生一个shared_ptr
,如果weak_ptr
为空,则锁定返回nullptr
,而shared_ptr
构造函数则会抛出异常。
那么问题来了:什么情况下应该使用其中一种?是否有与此相关的一般准则或最佳实践?
从http://en.cppreference.com/w/cpp/memory/weak_ptr/lock复制
这个函数和std::shared_ptr的构造函数都可以用于获取由std::weak_ptr引用的托管对象的临时所有权。区别在于,当std::weak_ptr参数为空时,std::shared_ptr的构造函数会抛出异常,而std::weak_ptr::lock()会构造一个空的std::shared_ptr。
这使我相信,您可以根据是否想要抛出异常来选择使用哪个函数。当它必须工作时,可以使用构造函数,而当可能无法正常工作并且您可以检查时,可以使用lock
。