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