gpt4 book ai didi

c++ - std::weak_ptr:锁或 shared_ptr 构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:42 28 4
gpt4 key购买 nike

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

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

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

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

最佳答案

复制自http://en.cppreference.com/w/cpp/memory/weak_ptr/lock

Both this function and the constructor of std::shared_ptr may be used to acquire temporary ownership of the managed object referred to by a std::weak_ptr. The difference is that the constructor of std::shared_ptr throws an exception when its std::weak_ptr argument is empty, while std::weak_ptr::lock() constructs an empty std::shared_ptr.

这让我相信您根据是否要抛出异常来选择使用哪个。构造函数可以在它必须工作时使用,而lock可以在它可能不工作并且您可以检查时使用。

关于c++ - std::weak_ptr:锁或 shared_ptr 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34139018/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com