Автоматически создаваемые конструкторы

Автоматически создаваемые конструкторы

В C++ для класса автоматически создаются следующие конструкторы (если они не были явно определены программистом):

  1. Конструктор по умолчанию (без параметров)

  • Создается автоматически только если не определен никакой другой конструктор.
  • Выполняет инициализацию членов класса значениями по умолчанию.
  • Для встроенных типов это будут случайные значения (мусор).
  • Для объектов других классов вызываются их конструкторы по умолчанию.
  1. Конструктор копирования

  • Создает новый объект как копию существующего.
  • Выполняет полное побайтовое копирование (shallow copy).
  • Прототип конструктора: ClassName(const ClassName& other).
  1. Конструктор перемещения (начиная с C++11)

  • Перемещает ресурсы из одного объекта в другой, не создавая копии.
  • Прототип: ClassName(ClassName&& other).
  • Оставляет исходный объект в валидном, но неопределенном состоянии.
  1. Оператор присваивания копированием

  • Копирует содержимое одного объекта в другой существующий
  • Прототип: ClassName& operator=(const ClassName& other)
  1. Оператор присваивания перемещением (начиная с C++11)

  • Перемещает ресурсы между существующими объектами.
  • Прототип: ClassName& operator=(ClassName&& other).
  1. Деструктор

  • Вызывается автоматически при выходе объекта из области видимости.
  • Освобождает ресурсы при уничтожении объекта.
  • Прототип: ~ClassName().
  • Не очищает указатель объекта при динамическом выделении памяти.

Важно отметить:

  • Если вы явно определите хотя бы один конструктор, компилятор не будет создавать конструктор по умолчанию.
  • Если вы управляете ресурсами в классе (например, динамической памятью), следует явно определить или запретить эти специальные функции-члены.
  • С C++11 можно явно указать компилятору создать (=default) или запретить (=delete) любую из этих функций

Поделиться: 

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать rubasic.ru, вы соглашаетесь на использование файлов cookie.
Понятно