【问题标题】:std::weak_ptr: lock or shared_ptr constructor?std::weak_ptr: lock 还是 shared_ptr 构造函数?
【发布时间】:2016-03-12 09:03:20
【问题描述】:

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

  1. 使用lock()
  2. weak_ptr 传递给shared_ptr 构造函数

这两者都会产生一个shared_ptr,如果weak_ptr 为空且shared_ptr 构造函数抛出异常,则锁返回nullptr

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

【问题讨论】:

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


    【解决方案1】:

    复制自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可以在它可能不工作的时候使用,你可以检查一下。

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2017-10-02
      • 2012-08-13
      • 1970-01-01
      • 2016-10-18
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多