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 подскажет развёрнутый ответ в реальном времени.