Mediumconstructorexceptions
Как обрабатывать ошибки в конструкторе, если есть несколько new?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Проблема: при new B после new A — если new B бросит, a утёк (деструктор не вызовется). Решение — RAII-члены вместо raw указателей.
// ПЛОХО: утечка a при throw в b
class Bad {
A* a; B* b;
public:
Bad() : a(new A), b(new B) {} // если new B бросит — a утечёт
~Bad() { delete a; delete b; }
};
// ХОРОШО: make_unique — при throw в b, ~unique_ptr для a вызовется
class Good {
std::unique_ptr<A> a;
std::unique_ptr<B> b;
public:
Good() : a(std::make_unique<A>()), b(std::make_unique<B>()) {}
};Никогда не храните raw new в членах без RAII-обёртки.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.