кольцевой буфер, который реконфигурирует существующие объекты вместо их замены?

Я думал об использовании Boost Round_buffer. От Вот:

Для достижения максимальной эффективности циркулярный буфер сохраняет свои элементы в непрерывной области памяти, что позволяет:

Использование фиксированной памяти и неявное или неожиданное выделение памяти.

Но я должен был использовать циркулярный вызов cb.push_back(myObj), Чтобы сделать этот вызов, я должен установить этот объект. Когда я звоню push_back мой новый объект заменяет старый, устаревший объект из циркулярного буфера.

Поэтому при использовании round_buffer я интенсивно выделяю память, потому что мне нужно создавать новый объект для каждого push_back,

Но я очень хочу избежать появления новых объектов. Вместо этого я хочу «перенастроить» объекты из circular_buffer, Если это возможно? Можете ли вы предложить циклический буфер, который позволяет повторно использовать объекты внутри него, чтобы избежать дорогостоящего выделения памяти во время выполнения?

1

Решение

Если ваши объекты достаточно дороги для создания экземпляра, вы можете предварительно выделить их пул, а затем поместить shared_ptrs для объединенных объектов в круговой буфер для их повторного использования.

3

Другие решения

Возможно, вы хотите циркуляр итератор а не круговой буфер.
Заполните буфер фиксированной длины созданными по умолчанию элементами.
Затем, когда вы заполняете элементы (через циклический итератор), вы можете просто изменить структуры вместо копирования.

Для примера кругового итератора, проверьте принятый ответ на этот вопрос.

2