繁体   English   中英

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

[英]circular buffer which reconfigure existent objects instead of replacing them?

我正在考虑使用boost round_buffer。 这里

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

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

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

因此,在使用circular_buffer时,我会大量分配内存,因为我必须为每个push_back实例化一个新对象。

但是我真的想避免新的对象声明。 相反,我想从“ circular_buffer ”中“重新配置”对象。 如果可能的话? 您是否可以建议使用循环缓冲区,以允许重用其中的对象,从而避免昂贵的运行时内存分配?

如果您的对象足够昂贵,无法实例化,则可以预分配它们的池,然后将shared_ptr与池对象放到循环缓冲区中以重用它们。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM