Sobes.tech
Назад к вопросам
Junior — Middle
85

Можете ли вы объяснить, что такое std::exception_ptr в C++ и как оно используется для обработки исключений?

Ответ от нейросети

sobes.tech AI

std::exception_ptr — это умный указатель в C++, который хранит информацию об исключении, позволяя сохранить и повторно выбросить его позже. Это полезно для передачи исключений между потоками или для отложенной обработки.

Основные моменты:

  • Получить exception_ptr можно с помощью std::current_exception() внутри catch-блока.
  • Повторно выбросить исключение можно через std::rethrow_exception(exception_ptr).

Пример:

#include <iostream>
#include <exception>
#include <thread>

void threadFunc(std::exception_ptr& eptr) {
    try {
        throw std::runtime_error("Ошибка в потоке");
    } catch (...) {
        eptr = std::current_exception(); // сохраняем исключение
    }
}

int main() {
    std::exception_ptr eptr;
    std::thread t(threadFunc, std::ref(eptr));
    t.join();

    if (eptr) {
        try {
            std::rethrow_exception(eptr); // повторно выбрасываем
        } catch (const std::exception& e) {
            std::cout << "Поймано исключение: " << e.what() << std::endl;
        }
    }
    return 0;
}

Таким образом, std::exception_ptr позволяет безопасно передавать исключения между контекстами.