循环缓冲区,重新配置现有对象,而不是替换它们

circular buffer which reconfigure existent objects instead of replacing them?

本文关键字:对象 替换 缓冲区 循环缓冲 新配置 配置 循环      更新时间:2023-10-16

我正在考虑使用boost circular_buffer。从这里:

为了达到最大的效率,circular_buffer将它的元素存储在一个连续的内存区域中,这样就可以:

使用固定内存,没有隐式或意外的内存分配。

但是我应该使用circular_buffer调用cb.push_back(myObj)。要进行这个调用,我必须实例化这个对象。当我调用push_back时,我的新对象替换了circular_buffer中旧的、过时的对象。

因此,当使用circular_buffer时,我做了密集的内存分配,因为我必须为每个push_back建立新的对象。

但是我真的想避免安装新的对象。相反,我想"重新配置"。来自circular_buffer的物体。如果可能的话?你能建议循环缓冲区,它允许重用内部的对象,以避免昂贵的运行时内存分配?

如果对象的实例化成本足够高,则可以预先分配一个对象池,然后将池中对象的shared_ptr s放入循环缓冲区以重用它们

也许你想要一个循环迭代器而不是循环缓冲区。用默认构造的元素填充固定长度的缓冲区。然后,当你填充元素时(通过循环迭代器),你可以直接修改结构,而不是复制。

作为一个循环迭代器的例子,检查这个问题的可接受的答案