При росте вектора сообщения копируются, хотя move-конструктор есть
struct Message {
std::string payload;
std::vector<Header> headers;
Message(const Message&) = default;
Message(Message&& other) : payload(std::move(other.payload)),
headers(std::move(other.headers)) {}
};
std::vector<Message> batch;
for (...) batch.push_back(makeMessage());
Профайлер показывает, что при каждом увеличении ёмкости batch все старые элементы копируются. Почему?
- Move-конструктор не помечен noexcept
- push_back всегда копирует аргумент в вектор
- Нужен ещё move-оператор присваивания
- Вектор перемещает, только если есть reserve
