gpt4 book ai didi

c++ - 为什么 intrusive_ptr 和 shared_ptr 不能与 boost::intrusive 容器一起使用?

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

boost::intrusive 文档描述了如何 you can use smart pointers with intrusive containers但接着说你不能使用你最有可能使用的智能指针,“它必须具有与原始指针相同的所有权语义。这意味着资源管理智能指针(如 boost::shared_ptr)不能被使用。”

这是为什么?我想不出任何明显的理由应该禁止它们。究竟什么会破坏?无论如何,侵入式容器不会管理其中元素的分配。就我而言,我想使用 intrusive_ptr,但我看不出 shared_ptr 也不能工作的任何原因。

编辑:明确地说,我的意思是 Hook 指针(例如侵入式单链表中的下一个指针)是一个智能指针。

最佳答案

也许在 documentation for boost::intrusive::slist 中有线索它声明在默认配置下,slist 存储为循环列表,这排除了使用 shared_ptr/intrusive_ptr 和 friend ,因为你d有引用周期。

boost 的一部分不能与另一部分正常工作仍然很烦人;我想唯一的解决方法是使用 intrusive_ptr 之类的东西,并在将对象添加到容器时手动增加引用计数,并在删除它时减少它。 (这排除了 shared_ptr,因为你不能直接调整它的引用计数。)

关于c++ - 为什么 intrusive_ptr 和 shared_ptr 不能与 boost::intrusive 容器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871391/

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