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