std :: weak_ptr:lock或shared_ptr构造函数?

时间:2015-12-07 16:58:33

标签: c++ c++11 smart-pointers weak-ptr

似乎有两种方法可以临时获取weak_ptr指向的资源的所有权:

  1. 使用lock()
  2. weak_ptr传递给shared_ptr构造函数
  3. 这两个都产生shared_ptr,如果nullptr为空且weak_ptr构造函数抛出异常,则锁定返回shared_ptr

    所以问题是:何时应该使用其中一种?是否有与此相关的一般准则或最佳做法?

1 个答案:

答案 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可以在它可能不起作用时使用,你可以检查。