【问题标题】:Difference between boost ptr containers and normal containers?boost ptr容器和普通容器的区别?
【发布时间】:2014-07-26 02:04:27
【问题描述】:

使用 boost ptr 容器和包含智能指针的容器有什么区别?

class A {} 

// ptr containers:
boost::ptr_unordered_map<int, A> p;

// containers:
boost::unordered_map<int, boost::intrusive_ptr<A>> m;

【问题讨论】:

  • 我正在回滚最新版本。如果您有新问题,ask a new question。在这里编辑问题以使现有答案无效是一种不好的形式。

标签: c++ boost


【解决方案1】:

boost::ptr_unordered_map 没有在boost::shared_ptr&lt;A&gt; 的容器中产生的引用计数开销

它也不需要boost::intrusive_ptr&lt;A&gt; 需要的额外的A 对象接口

这使它成为管理堆分配对象的一个​​很好的解决方案,不需要对所包含的对象进行引用计数。

【讨论】:

  • 只是好奇,您认为他们为什么没有为boost::unordered_map&lt;int, boost::shared_ptr&lt;A&gt;&gt; 制作模板专业化?
  • @NickStrupat 我怀疑这是因为该类型可能需要也可能不需要对插入容器中的共享指针进行引用计数。不隐式知道其他指向对象的指针是否存在于其他地方。
  • 什么时候应该使用引用计数?
  • @DrewDormann 查看我的更新。我可以更改容器以在我的情况下使用 ptr 容器吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2010-12-26
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多