Easythrow-by-pointer

Можно ли бросать исключения по указателю (throw new Exception)?

1Постановка

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

2Решение

Технически можно, но это антипаттерн в C++. throw new создаёт объект в куче, который нужно удалять в catch — легко утечь.

// ПЛОХО: throw new — утечка, легко забыть delete
// throw new MyException();
// catch (MyException* e) { /* ... */ delete e; }  // утечка, если забыл

// ПРАВИЛЬНО: бросать по значению, ловить по константной ссылке
throw MyException("oops");
// ...
catch (const MyException& e) {
    std::cerr << e.what();   // компилятор сам управляет временем жизни
}

Компилятор управляет хранилищем объекта исключения. Java/C# бросают по ссылке (GC), но C++ выбрал модель по значению для предсказуемости.

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

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

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