Mediumbest practicesООП
Что такое rule of zero / rule of five / rule of three?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Это правила о том, какие специальные функции-члены класса нужно определять вручную.
// Rule of ZERO (современный подход): не пишем ничего
class Good {
std::vector<int> data_; // RAII-члены сами всё делают
std::string name_;
}; // компилятор генерирует корректные copy/move/dtor
// Rule of FIVE: если есть raw-ресурс — нужны все пять
class Raw {
int* data_;
public:
~Raw(); // 1. деструктор
Raw(const Raw&); // 2. copy ctor
Raw& operator=(const Raw&);// 3. copy assign
Raw(Raw&&) noexcept; // 4. move ctor
Raw& operator=(Raw&&); // 5. move assign
};- Rule of three (до C++11): нужен один из dtor/copy-ctor/copy-assign → нужны все три;
- Rule of five (C++11): добавились move-версии;
- Rule of zero: используйте RAII-члены и не пишите их вовсе.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.