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