Back to questions
Junior — Middle
86
Можете ли вы объяснить, что такое std::exception_ptr в C++ и как оно используется для обработки исключений?
Answer from AI
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 позволяет безопасно передавать исключения между контекстами.