Сопоставление Senior Правило 0/3/5 обновлено
Что объявили и что сгенерирует компилятор
Вопрос
Сопоставьте, что пользователь объявил в классе (больше ничего), с последствием.
Попробуйте сами
Нажмите слева, потом подходящее справа.
Показать ответ и разбор
Коротко
Это сокращённая таблица правил генерации. Самая коварная строка вторая: код компилируется, но перемещение тихо превращается в копирование.
Правильные пары
Только конструктор
T(int)Нет неявного конструктора по умолчаниюТолько деструктор
~T()Перемещение не генерируется, rvalue копируютсяТолько перемещающий конструкторКопирующие операции удалены
Член
int& refПрисваивания удалены, копирующий конструктор естьНичего не объявленоГенерируются все шесть по необходимости
Разбор
Это сокращённая таблица правил генерации. Самая коварная строка вторая: код компилируется, но перемещение тихо превращается в копирование.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Правило 0/3/5»
- Длинная арифметика: класс BigUint и факториал
- Класс матрицы 2×2 и быстрое возведение в степень
- Что даёт copy-and-swap
- Как написать оператор присваивания
- Куда пропал конструктор по умолчанию
- Пустой деструктор и перемещение
- Почему move должен быть noexcept
- Что выведет: деструктор отключил перемещение