专门用于shared_ptr的集合

时间:2009-06-05 16:12:55

标签: c++ optimization boost collections shared-ptr

是否存在一个知道shared_ptr内部的集合,并避免定期复制存储的shared_ptr元素,而只是复制它们的内部弱指针?

这隐含意味着不会进行构造函数/析构函数调用,并且不会对shared_ptrs的引用计数器进行操作。

2 个答案:

答案 0 :(得分:9)

理论上,在采用C ++ 0x之后,容器将被修改为在适当的地方使用移动语义。此时,shared_ptr也可以修改为具有移动构造函数,以最大限度地减少不必要的引用计数调整。

答案 1 :(得分:3)

  

知道shared_ptr内部,

那应该在那里回答你的问题。要了解内部结构,这样的集合几乎肯定必须成为boost的智能指针库的一部分。不幸的是,没有这样的事情。

这确实是智能指针的缺点。我建议使用限制内部完成的副本数量的数据结构。 Vector的重新分配将是痛苦的。也许一个deque,它有一个基于分块的分配,将是有用的。请记住,矢量实现往往会以指数级增加的块来获取新内存。因此,他们不会重新分配每10个元素。相反,你可以从128个元素开始,然后向量保留256个,然后向上移动到512,1024等。每次加倍需要的东西。

除此之外,还有boost的ptr_vector或预先分配数据结构,以防止内部复制。