gpt4 book ai didi

c++ - 在设计良好的代码中,您是否应该期望 weak_ptr 的锁定总是成功?

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:10 25 4
gpt4 key购买 nike

当您希望使用弱指针进行访问时,建议您首先通过锁定获得指向指向对象的强指针。如果先前删除了指向的对象,则锁定可能不会成功。

在我看来,除非你在打破循环来决定什么是弱指针时做错了什么,否则锁定将会成功。因此,您锁定只是为了交叉检查您的设计。

这是正确的吗?

我看过一些关于缓存的评论,但它们似乎是对 weak_ptr 的滥用。但当然,一个人的虐待是另一个人的创新。我想听听意见。

最佳答案

,你不应该。

假设您维护一个观察者列表,在销毁时您需要取消订阅观察者对其正在观察的对象的订阅,但这需要观察者维护其观察的实体列表,从而导致循环。

为了简化设计,引入一个间接层更简单。观察者和实体之间的代理将允许观察者被销毁,实体查询其 active 。

如何?只需分配一个 std::shared_ptr<Observer>并让实体只保留 std::weak_ptr<Observer> ,然后当实体遍历其观察者列表时,它可以剔除对自上次迭代以来死亡的那些人的引用。

关于c++ - 在设计良好的代码中,您是否应该期望 weak_ptr 的锁定总是成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10996117/

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