gpt4 book ai didi

c++ - 间接多级智能指针

转载 作者:行者123 更新时间:2023-11-28 03:42:08 25 4
gpt4 key购买 nike

比如说,给定以下智能指针方案:

 weak_ptr<Style> A -> weak_ptr<Style> B -> shared_ptr<Style> C

你能否更改第二个 weak_ptr (B) 以指向(观察)一个新的 shared_ptr (C),其方式仍然会使第一个 weak_ptr (A) 看到新更改的 shared_ptr (C)?

希望这是有道理的。鉴于 weak_ptr 在这种情况下可以提供安全性,我想远离原始指针。

编辑:

在重新阅读 boost 文档后,我意识到 weak_ptr operator= 本质上只是复制了另一个 weak_ptr 而实际上并没有让它观察到另一个 weak_ptr。因此,如果没有原始指针,就不能进行这种间接访问吗?

编辑 2:

扩展我的问题:我有一个 Label和一个 Glyph . LabelGlyph 的容器秒。标签有 shared_ptr<Style>和 Glyphs 有一个 weak_ptr到这种风格。我的意图是允许快速更改样式,而无需实际遍历所有标签字形。所以我想在 Label 中使用另一种“活跃”风格(如风格铅笔)并使所有字形都指向那个铅笔的东西。因此,每当我需要更改样式时,我只需将铅笔重新分配给一个新的 Style 对象。这可以仅使用智能指针来完成,还是我需要在某处混合原始指针?

最佳答案

如果你的对象有一个 Style 的 shared_ptr 并且它是相同的 Style 那么它们之间会处理这个 Style 对象的生命周期。但是请注意,它们共享对同一对象的引用,因此如果您修改样式,它们现在都将具有指向修改后样式的指针。

如果你在某处有一些样式表表,并且这是比你的项目更长寿的主要容器,那么你不需要你的项目有智能指针,除非存在它们可能需要保留对的引用的危险这种样式并在它从表格中删除或表格消失后使用它。

一般来说,暂时忘掉怎么做,想想对象所有权方面的内容。

关于c++ - 间接多级智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817996/

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