std::exception_ptr
是 C++ 标准库中的一种类型,它用于在异常处理过程中保存异常的指针,以便稍后再次处理异常。它的作用是允许异常在不同的上下文中传播并延迟处理,同时保留异常的类型和信息。
使用 std::exception_ptr
可以将异常从一个线程传递到另一个线程,或者在稍后的时间点重新抛出异常。这对于多线程编程或需要将异常传递给异步任务的情况非常有用。
下面是一个使用 std::exception_ptr
的简单示例:
#include <iostream>
#include <exception>
#include <stdexcept>
void processException(std::exception_ptr eptr) {
try {
if (eptr) {
std::rethrow_exception(eptr);
}
} catch (const std::exception& e) {
std::cout << "捕获到异常: " << e.what() << std::endl;
}
}
int main() {
std::exception_ptr eptr;
try {
throw std::runtime_error("自定义异常信息");
} catch (...) {
eptr = std::current_exception();
}
processException(eptr);
return 0;
}
上述代码中,我们首先定义了一个 std::exception_ptr eptr
变量,用于保存异常指针。然后,在 try
块中抛出了一个 std::runtime_error
异常,并在 catch
块中使用 std::current_exception()
将当前异常转换为 std::exception_ptr
对象,并将它赋值给 eptr
。
接下来,我们调用 processException(eptr)
函数,将保存的异常指针传递给它。在 processException
函数中,我们使用 std::rethrow_exception
重新抛出异常,并在外部的 catch
块中捕获并处理异常。
使用 std::exception_ptr
可以在程序的不同部分传递和处理异常,避免了异常的直接处理和中断程序流程的问题。通过将异常指针保存下来,我们可以在合适的时机重新抛出异常或执行其他操作,以便更好地处理异常情况。