Карточка 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 ошибок.
Ещё по теме «Move-семантика»
- Перенос между складами: map::extract без копий
- Топ участников: сортировка записей без копий строк
- lvalue, prvalue, xvalue
- std::move от const-объекта
- Допишите обёртку с perfect forwarding
- move или forward в шаблоне
- Что такое T&& в шаблоне
- Состояние после перемещения