专门用于shared_ptr的集合

5 c++ collections optimization boost shared-ptr

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

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

MSN*_*MSN 9

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

  • 在C++ 0x草案中,shared_ptr已经有此行为. (2认同)

Dou*_* T. 3

了解shared_ptr内部结构,

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

这确实是智能指针的一个缺点。我建议使用限制内部完成的副本数量的数据结构。Vector 的重新分配将会很痛苦。也许具有基于分块分配的双端队列会很有用。还要记住,向量实现往往会以指数增加的块来获取新的内存。所以他们不会重新分配,比如说,每 10 个元素。相反,您可以从 128 个元素开始,然后向量保留自己 256 个元素,然后增加到 512 个、1024 个元素等。每次将所需元素加倍。

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