Выбор ответа Middle Правило 0/3/5 обновлено
Объявили перемещающий конструктор
Вопрос
В классе объявлен только перемещающий конструктор T(T&&). Что с копированием?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Копирующий конструктор и копирующее присваивание неявно удалены (= delete). Объявленная перемещающая операция делает неявные копирующие операции удалёнными (= delete).
Варианты ответа
- Копирование генерируется как обычно, независимо от перемещения
- Копирующий конструктор и копирующее присваивание неявно удалены (
= delete)правильный ответ - Копирование выполняется через перемещающий конструктор
T(T&&) - Копирующий конструктор генерируется, а копирующее присваивание нет
Разбор
Объявленная перемещающая операция делает неявные копирующие операции удалёнными (= delete). Если копирование нужно, его объявляют явно, хотя бы = default.
- По старому правилу «всё генерируется» живут только классы без пользовательских перемещающих операций.
- Перемещающий конструктор не может принять lvalue, поэтому копирования через него нет.
- Удаляются обе копирующие операции, а не одна.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что объявили и что сгенерирует компилятор
Следующий вопрос
Почему move должен быть noexcept
Ещё по теме «Правило 0/3/5»
- Длинная арифметика: класс BigUint и факториал
- Класс матрицы 2×2 и быстрое возведение в степень
- Что даёт copy-and-swap
- Как написать оператор присваивания
- Куда пропал конструктор по умолчанию
- Пустой деструктор и перемещение
- Когда не генерируется перемещение
- Что выведет: деструктор отключил перемещение