似乎有两种方法可以临时获取weak_ptr
指向的资源的所有权:
lock()
weak_ptr
传递给shared_ptr
构造函数这两个都产生shared_ptr
,如果nullptr
为空且weak_ptr
构造函数抛出异常,则锁定返回shared_ptr
。
所以问题是:何时应该使用其中一种?是否有与此相关的一般准则或最佳做法?
答案 0 :(得分:8)
从http://en.cppreference.com/w/cpp/memory/weak_ptr/lock
复制可以使用此函数和std :: shared_ptr的构造函数 获取由a引用的被管对象的临时所有权 的std :: weak_ptr的。不同的是构造函数 当std :: weak_ptr参数为std :: shared_ptr时抛出异常 空,而std :: weak_ptr :: lock()构造一个空的 的std :: shared_ptr的。
这让我相信你根据是否要抛出异常来选择使用哪一个。构造函数可以在必须工作时使用,而lock
可以在它可能不起作用时使用,你可以检查。