Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Конструкторы и деструкторы

Страница 24 из 43 · 2026-10-25 · 1 мин чтения

Конструкторы и деструкторы

Конструктор

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

class Player {public:    Player(std::string name, int health)        : name(std::move(name)), health(health) {}private:    std::string name;    int health;};

Список инициализации после : непосредственно инициализирует поля. Для const-полей, ссылок и членов без конструктора по умолчанию он необходим.

Порядок инициализации

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

Конструктор по умолчанию

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

class Point {public:    Point() = default;    Point(int x, int y) : x(x), y(y) {}private:    int x{};    int y{};};

= default просит компилятор сгенерировать стандартную реализацию, если это допустимо.

Деструктор

Деструктор называется ~ИмяКласса() и вызывается при завершении времени жизни объекта. Обычно он нужен для освобождения ресурсов, которыми объект владеет напрямую. При использовании RAII-членов часто можно оставить деструктор по умолчанию.

Rule of Zero

Если класс хранит std::string, std::vector, std::unique_ptr и другие RAII-типы, не добавляй вручную копирующие/перемещающие операции без необходимости. Пусть стандартные члены управляют ресурсами.

Итог

Конструкторы обеспечивают корректное начальное состояние, а деструкторы — корректное завершение времени жизни. Предпочитай список инициализации и Rule of Zero.