Чтобы повысить эффективность std::vector<T>
, базовый массив должен быть предварительно выделен и иногда перераспределен. Это, однако, требует создания и последующего перемещения объектов типа T
с копией ctor или перемещением ctor.
Проблема, с которой я столкнулась, заключается в том, что T
нельзя скопировать или переместить, потому что он содержит объекты, которые нельзя скопировать или переместить (например, atomic
и mutex
). (И, да, я реализую простой пул потоков.)
Я хотел бы избежать использования указателей, потому что:
- Мне не нужен уровень косвенности, поэтому я не хочу этого.
- (Указатели менее эффективны и увеличивают сложность. Использование указателей увеличивает фрагментацию памяти и снижает локальность данных, которые могут (но не обязательно должны) вызывать заметное влияние производительности. Не так важно, но все же стоит рассмотреть.)
Есть ли способ избежать уровня косвенности здесь?
ОБНОВЛЕНИЕ: я исправил некоторые неправильные предположения и переформулировал вопрос, основываясь на отзывах в комментариях и ответах.