Спецификаторы default и delete

Если внутри класса мы создаем конструктор с параметрами, то конструктор по умолчанию автоматически не создается. Если конструктор по умолчанию нужен и реализация по умолчанию устраивает, то можно после закрывающей круглой скобки указать оператор = после которого добавлен спецификатор default:

<Название класса>() = default;

В этом случае компилятор автоматически создаст тело конструктора с реализацией по умолчанию. Спецификатор default допускается указывать не только для конструктора по умолчанию, но и для других специальных методов, генерируемых компилятором по умолчанию: для конструктора копирования и конструктора перемещения, деструктора, оператора присваивания и оператора перемещения:

class C {
   int x_ = 0;
public:
   C() = default;              // Конструктор по умолчанию
   C(int x) { x_ = x; }
   C(const C&) = default;      // Конструктор копирования
   ~C() = default;             // Деструктор
   int getX() { return x_; }
};

Спецификатор delete предназначен для пометки методов, которые не должны вызываться:

class C {
   double x_;
public:
   C(int) = delete;
   C(double x) { x_ = x; }
   double getX() { return x_; }
};

В этом случае попытка вызвать конструктор с параметром типа int приведет к ошибке:

C obj(10.2);   // OK
// C obj2(10); // Ошибка

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов