gpt4 book ai didi

C++ 设计 : Passing pointer/reference to ref-counted object

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:30 25 4
gpt4 key购买 nike

我有一个有向无环图,由 Node 对象组成。每个节点都有一个 std::shared_ptr 的列表s 到其他节点,这些节点是图中的子节点。我有很多我需要的有用方法,比如插入/放置/重新设置节点的父节点,测试一个节点是否是另一个节点的祖先,等等。有些是标准的类似 STL 的方法,有些是特定于有向无环图和特定于我的需要。

问题是,当这样的方法将节点作为参数时,它是否应该采用引用?的 weak_ptr ?或 shared_ptr ?我试图检查用例,但很难说。这里最好的设计是什么?我是智能指针的新手,我不确定什么是最佳选择。我应该治疗 shared_ptr<Node>作为节点对象的“表示”?还是选择的方式更复杂?

提前致谢

最佳答案

仅在所有者集有意义地扩展时传递 shared_ptr(按值)或复制它。在将节点作为纯信息处理时传递指针是安全的,也是首选。

注意 std::enable_shared_from_this 工具可以从任何图形对象中检索正确的 std::shared_ptr。对于该基类,有效的裸指针和共享指针本质上是等价的。我不确定它会增加多少开销(如果有的话)。 (它绝对确保不会有额外的堆碎片,std::make_shared 也是如此。)

在任何地方传递 shared_ptr 只是对 shared_from_this 优雅提供的功能的优化。但是当你这样做时,通过 const 引用传递它们,因为它们只是提供信息而不主动仲裁所有权。

关于C++ 设计 : Passing pointer/reference to ref-counted object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14207622/

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