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 подскажет развёрнутый ответ в реальном времени.