Карточка Middle Правило 0/3/5 спрашивают часто обновлено

Почему move должен быть noexcept

Вопрос

Почему перемещающий конструктор помечают noexcept?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

При реаллокации std::vector обязан сохранить строгую гарантию: если перенос элемента бросит, старый буфер должен остаться целым. Поэтому он перемещает элементы только при noexcept-перемещении (std::moveifnoexcept), иначе копирует.

Ответ

При реаллокации std::vector обязан сохранить строгую гарантию: если перенос элемента бросит, старый буфер должен остаться целым. Поэтому он перемещает элементы только при noexcept-перемещении (std::move_if_noexcept), иначе копирует.

Разбор

При реаллокации std::vector обязан сохранить строгую гарантию: если перенос элемента бросит, старый буфер должен остаться целым. Поэтому он перемещает элементы только при noexcept-перемещении (std::move_if_noexcept), иначе копирует.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.