Выбор ответа Middle Правило 0/3/5 обновлено

Объявили перемещающий конструктор

Вопрос

В классе объявлен только перемещающий конструктор T(T&&). Что с копированием?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Копирующий конструктор и копирующее присваивание неявно удалены (= delete). Объявленная перемещающая операция делает неявные копирующие операции удалёнными (= delete).

Варианты ответа

  1. Копирование генерируется как обычно, независимо от перемещения
  2. Копирующий конструктор и копирующее присваивание неявно удалены (= delete)правильный ответ
  3. Копирование выполняется через перемещающий конструктор T(T&&)
  4. Копирующий конструктор генерируется, а копирующее присваивание нет

Разбор

Объявленная перемещающая операция делает неявные копирующие операции удалёнными (= delete). Если копирование нужно, его объявляют явно, хотя бы = default.

  • По старому правилу «всё генерируется» живут только классы без пользовательских перемещающих операций.
  • Перемещающий конструктор не может принять lvalue, поэтому копирования через него нет.
  • Удаляются обе копирующие операции, а не одна.

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

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