gpt4 book ai didi

c++ - 缺少 shared_ptr 和 weak_ptr 之间的相等性

转载 作者:可可西里 更新时间:2023-11-01 14:57:04 29 4
gpt4 key购买 nike

虽然我明白为什么 shared_ptrunique_ptr 没有 operator==,但我想知道为什么 没有shared_ptrweak_ptr。特别是因为您可以通过对 shared_ptr 的引用创建一个 weak_ptr。我假设在 99% 的时间里您都需要 lhs.get() == rhs.get()。我现在会继续将其引入我的代码,除非有人能给我一个很好的理由,为什么不应该做这样的事情。

最佳答案

weak_ptr 没有 get() 方法,因为您需要在访问底层指针之前显式锁定 weak_ptr。明确这一点是一个深思熟虑的设计决定。如果转换是隐式的,那么很容易编写不安全的代码,如果对象的最后一个 shared_ptr 被销毁,而底层指针是从 weak_ptr 获得的仍在检查中。

This boost page很好地描述了陷阱以及为什么 weak_ptr 具有如此有限的接口(interface)。

如果你需要做一个快速比较,那么你可以做shared == weak.lock()。如果比较结果为真,那么您就知道 weak 必须仍然有效,因为您将单独的 shared_ptr 保存到同一对象。如果比较返回 false,则没有这样的保证。

关于c++ - 缺少 shared_ptr 和 weak_ptr 之间的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968189/

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