5

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

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

4

2 回答 2

9

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

于 2009-06-05T16:21:24.027 回答
3

知道 shared_ptr 内部,

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

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

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

于 2009-06-05T16:18:08.237 回答