gpt4 book ai didi

c++ - `std::weak_ptr` 什么时候为空?

转载 作者:行者123 更新时间:2023-12-05 04:25:28 27 4
gpt4 key购买 nike

根据 [util.smartptr.weak.obs]/4weak_ptr::owner_before 严格弱排序是这样的:“两个 shared_ptrweak_ptr 实例是等价的,当且仅当它们共享所有权或者是都是空的。”

但是,我在标准中没有看到任何定义 weak_ptr 为空的含义的内容。明明一个默认构造的weak_ptr是空的,一个空的shared_ptr构造的weak_ptr也是空的,但是好像没有显式说明过期的 weak_ptr 是否为空。

最佳答案

虽然我看不到它得到标准的保证,owner_before 排序的可用性1 要求:

  • 已过期的 weak_ptr2 不是空的。

这是因为只有对象的变异才应该改变它在排序中的位置,而 weak_ptr 可能会在没有被变异的情况下过期。


1 例如,这里有人使用 weak_ptr 作为 std::set 中的键:How to compute hash of std::weak_ptr? .这样做,以及 std::map 同样,需要排序才能在到期后继续存在。如果有一个 owner_hash 允许与 std::unordered_setstd::unordered_map 一起使用,该哈希也必须在过期后继续存在。


2 请注意“已过期”和“已过期”之间的细微差别 -- 构造为空的 weak_ptr 或分配有空指针值的 weak_ptr 具有 已过期() == true。但它没有过期( Action 动词),它是在过期状态下创建的。我的回答仅适用于 weak_ptr 值,这些值在某个时候未过期,然后由于 shared_ptr 值与目标分离而(被动)过期。

关于c++ - `std::weak_ptr` 什么时候为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73253624/

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