C++ 专门用于共享ptr的集合

C++ 专门用于共享ptr的集合,c++,optimization,boost,collections,shared-ptr,C++,Optimization,Boost,Collections,Shared Ptr,是否存在一个集合,该集合了解共享的\u ptr内部,并避免定期复制存储的共享\u ptr元素,而只复制其内部弱指针 这意味着不会进行构造函数/析构函数调用,也不会对共享的ptr的引用计数器进行操作 了解共享的ptr内部结构 这就应该回答你的问题了。要了解其内部结构,几乎可以肯定,这样的集合必须是boost的智能指针库的一部分。不幸的是,没有这样的事情 这确实是智能指针的一个缺点。我建议使用限制内部复制数量的数据结构。Vector的重新分配将是痛苦的。也许一个基于分块分配的deque会有用。还要记

是否存在一个集合,该集合了解共享的\u ptr内部,并避免定期复制存储的共享\u ptr元素,而只复制其内部弱指针

这意味着不会进行构造函数/析构函数调用,也不会对共享的ptr的引用计数器进行操作

了解共享的ptr内部结构

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

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


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

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