gpt4 book ai didi

c++ - 确定 std::shared_ptr 是否是对对象的唯一引用

转载 作者:太空狗 更新时间:2023-10-29 21:10:23 27 4
gpt4 key购买 nike

有没有办法确保 std::shared_ptr 是整个程序中唯一对对象的引用?

我的印象是,即使在多线程环境中,以下内容也足够了,但是随着 std::shared_ptr::unique 被弃用,我不太确定(我的 concurrent-fu 失败了我):

std::shared_ptr<Foo> bar(std::shared_ptr<Foo>&& src) {
std::shared_ptr<Foo> self = std::move(src);
if(self && self.unique()) {
// self is *the* only reference
}

return std::move(self);
}

(编辑)

如果我理解正确(参见 e.g. Why is std::shared_ptr::unique() deprecated?)原子引用计数保证 self 是对 if 中数据的唯一实时引用 block ,但是通过破坏引用进行的修改不是 sequenced-beforeunique() 的调用,并且可能尚未完成。

从此以后,在 if block 中修改 *self 时仍然存在潜在的数据竞争。这是正确的吗?

最佳答案

这还不够,因为 .unique()(和 .use_count())会忽略任何链接到您的 weak_ptr shared_ptr,可以同时 .lock()ed,使您的假设无效。

关于c++ - 确定 std::shared_ptr 是否是对对象的唯一引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492147/

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