Выбор ответа Middle Правило 0/3/5 спрашивают часто обновлено
Правило нуля
Вопрос
В чём суть правила нуля?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Не объявлять специальные функции, а владение поручить членам (vector, uniqueptr). Если каждый член сам умеет копироваться, перемещаться и освобождаться, сгенерированные компилятором функции автоматически правильные.
Варианты ответа
- У класса не должно быть данных-членов, только методы и статические поля
- Все специальные функции объявляются
= delete, а нужные пишутся явно - Класс должен быть тривиально копируемым, чтобы копироваться через
memcpy - Не объявлять специальные функции, а владение поручить членам (vector, unique_ptr)правильный ответ
Разбор
Если каждый член сам умеет копироваться, перемещаться и освобождаться, сгенерированные компилятором функции автоматически правильные. Ручное управление прячут в маленькие RAII-обёртки.
- Члены могут быть любыми, важно, кто ими владеет.
- Удалять всё не нужно, нужно не писать лишнего.
- Тривиальность здесь ни при чём:
std::stringнетривиален, но правило нуля для него работает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Правило 0/3/5»
- Длинная арифметика: класс BigUint и факториал
- Класс матрицы 2×2 и быстрое возведение в степень
- Что даёт copy-and-swap
- Как написать оператор присваивания
- Куда пропал конструктор по умолчанию
- Пустой деструктор и перемещение
- Когда не генерируется перемещение
- Что объявили и что сгенерирует компилятор