Вступить в клуб →
средняявопросСовременный C++: move-семантика, шаблоны, лямбды

При росте вектора сообщения копируются, хотя 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

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела