Easyконструктор

Чем default и delete конструкторы (= default, = delete)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

= default — явно просить компилятор сгенерировать специальную функцию. = delete — запретить её использование. Идиоматично и самодокументируемо.

class NonCopyable {
public:
    NonCopyable() = default;                  // явно default-constructible
    NonCopyable(const NonCopyable&) = delete; // запретить copy
    NonCopyable& operator=(const NonCopyable&) = delete;
};

// delete для удаления нежелательных перегрузок
void f(long);
void f(bool) = delete;   // запретить bool → long conversion
f(true);   // ошибка
  • = default полезен когда есть пользовательский конструктор, но нужен и default;
  • = delete применяется для некопируемых типов (singleton, I/O objects, mutex);
  • = default сохраняет тривиальность (если бы пользовательский конструктор сделал тип нетривиальным).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.