循环缓冲区,重新配置现有对象,而不是替换它们
circular buffer which reconfigure existent objects instead of replacing them?
我正在考虑使用boost circular_buffer。从这里:
为了达到最大的效率,circular_buffer将它的元素存储在一个连续的内存区域中,这样就可以:
使用固定内存,没有隐式或意外的内存分配。
但是我应该使用circular_buffer调用cb.push_back(myObj)
。要进行这个调用,我必须实例化这个对象。当我调用push_back
时,我的新对象替换了circular_buffer中旧的、过时的对象。
因此,当使用circular_buffer时,我做了密集的内存分配,因为我必须为每个push_back
建立新的对象。
但是我真的想避免安装新的对象。相反,我想"重新配置"。来自circular_buffer
的物体。如果可能的话?你能建议循环缓冲区,它允许重用内部的对象,以避免昂贵的运行时内存分配?
如果对象的实例化成本足够高,则可以预先分配一个对象池,然后将池中对象的shared_ptr
s放入循环缓冲区以重用它们
也许你想要一个循环迭代器而不是循环缓冲区。用默认构造的元素填充固定长度的缓冲区。然后,当你填充元素时(通过循环迭代器),你可以直接修改结构,而不是复制。
作为一个循环迭代器的例子,检查这个问题的可接受的答案
相关文章:
- 如何替换双端对象中的元素?
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- c++ 替换调用对象方法的宏函数
- 替换派生对象向量中的对象"no matching function to call"
- 调用Main将替换矢量对象并覆盖数据
- 每 200 帧替换一次对象
- 使用迭代器替换矢量中的对象
- 替换对象时调用析构函数
- 将对象属性替换为列表
- 为了对象替换的目的,究竟什么构成了对象的"name"?
- IE 探索 11 < c++ ATL COM 浏览器帮助程序对象(加载项)来替换 DOM 中的文本
- 打开"GL着色器存储缓冲区对象"以替换"顶点属性"
- 在编译时替换对象文件中的符号.例如,换掉main
- 如何替换 COM 对象
- 当我替换对象时,我需要删除我在类成员中设置的对象吗
- C++ 替换矢量中的动态对象
- 当C++匿名对象替换以前分配的对象时会发生什么情况
- 将向量中的unique_ptr对象替换为另一个unique_ptr
- 当我使用DC时,我应该总是在默认对象完成工作后用新对象替换它吗
- 对象替换自己是否合法?