Hardexception-ptr
Что такое std::current_exception и std::rethrow_exception?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`std::current_exception()` возвращает std::exception_ptr — текущее обрабатываемое исключение. Его можно сохранить, передать в другой поток и перебросить через `std::rethrow_exception(ptr)`.
// Передача исключения между потоками
std::exception_ptr g_eptr;
void worker() {
try { risky(); }
catch (...) { g_eptr = std::current_exception(); }
}
// В главном потоке
if (g_eptr) {
try { std::rethrow_exception(g_eptr); }
catch (const std::exception& e) { std::cerr << e.what(); }
}На этом построены std::promise/future и std::async — исключение из задачи сохраняется и перебрасывается в future.get().
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.