1

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

为了实现最大效率,circal_buffer 将其元素存储在连续的内存区域中,然后启用:

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

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

因此,在使用 circular_buffer 时,我会大量分配内存,因为我必须为每个push_back.

但我真的想避免新对象的实例化。相反,我想从circular_buffer. 如果有可能?你能推荐一个允许重用其中的对象以避免昂贵的运行时内存分配的循环缓冲区吗?

4

2 回答 2

3

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

于 2013-04-23T20:20:54.457 回答
2

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

有关循环迭代器的示例,请查看此问题的已接受答案。

于 2013-04-23T20:36:09.120 回答