Sobes.tech
Back to questions
Junior — Middle
84

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

Answer from AI

sobes.tech AI

Правило трёх в C++ гласит: если в классе нужно явно определить один из трёх специальных методов — деструктор, конструктор копирования или оператор присваивания копированием, то, скорее всего, нужно определить все три. Это связано с управлением ресурсами (например, динамической памятью). Если класс владеет ресурсами, то для корректного копирования и освобождения ресурсов необходимо реализовать все три метода, чтобы избежать утечек памяти или двойного освобождения.

Пример:

class MyClass {
    int* data;
public:
    MyClass() : data(new int[10]) {}
    ~MyClass() { delete[] data; }
    MyClass(const MyClass& other) {
        data = new int[10];
        std::copy(other.data, other.data + 10, data);
    }
    MyClass& operator=(const MyClass& other) {
        if (this != &other) {
            delete[] data;
            data = new int[10];
            std::copy(other.data, other.data + 10, data);
        }
        return *this;
    }
};