Карточка Middle Move-семантика обновлено

std::exchange в перемещении

Вопрос

Зачем в перемещающем конструкторе пишут std::exchange(o.ptr_, nullptr)?

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

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

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

Коротко

std::exchange(obj, newvalue) записывает новое значение и возвращает старое. Так одним выражением забираем указатель и обнуляем источник, чтобы его деструктор не освободил ресурс второй раз.

Ответ

std::exchange(obj, new_value) записывает новое значение и возвращает старое. Так одним выражением забираем указатель и обнуляем источник, чтобы его деструктор не освободил ресурс второй раз.

Разбор

std::exchange(obj, new_value) записывает новое значение и возвращает старое. Так одним выражением забираем указатель и обнуляем источник, чтобы его деструктор не освободил ресурс второй раз.

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

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