Исследуя идеи для векторного контейнера constexpr, я наткнулся на контейнер small_vector от folly. Я читал реализацию и был сбит с толку этой частью ...

0
ParadoxFox 1 Янв 2021 в 07:25

1 ответ

Лучший ответ

Почему бы не использовать новое размещение в обоих случаях

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

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

Ответить на вопрос, является ли фактическая причина одной из этих причин или чем-то еще, может только автор контейнера.

Почему бы не использовать назначение хода в обоих случаях?

Потому что поведение присвоения перемещения нетривиального типа в неинициализированной памяти не определено.

2
eerorika 1 Янв 2021 в 04:55