Sobes.tech
Back to questions
Junior — Middle
87

Можете объяснить концепцию правила пяти в программировании или проектировании систем?

Companies where asked
ГК Адепт

Answer from AI

sobes.tech AI

Правило пяти (Rule of Five) в C++ связано с управлением ресурсами и определяет, что если в классе нужно явно определить один из следующих методов:

  • Деструктор
  • Конструктор копирования
  • Оператор присваивания копированием
  • Конструктор перемещения
  • Оператор присваивания перемещением

то, скорее всего, нужно определить все пять, чтобы правильно управлять ресурсами и избежать проблем с утечками памяти или двойным освобождением.

Это правило расширяет классическое правило трёх (деструктор, конструктор копирования, оператор присваивания копированием) с появлением семантики перемещения в C++11.

Пример:

class MyClass {
    int* data;
public:
    MyClass() : data(new int[10]) {}
    ~MyClass() { delete[] data; }
    MyClass(const MyClass& other) { /* копирование данных */ }
    MyClass& operator=(const MyClass& other) { /* копирование данных */ return *this; }
    MyClass(MyClass&& other) noexcept { /* перемещение данных */ }
    MyClass& operator=(MyClass&& other) noexcept { /* перемещение данных */ return *this; }
};