Конструкторы и деструкторы
Конструктор
Конструктор вызывается при создании объекта и подготавливает его состояние. У него то же имя, что у класса, и нет возвращаемого типа.
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.
