C++ 捕获所有异常并拿到错误原因的方法

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 可以在程序的不同部分传递和处理异常,避免了异常的直接处理和中断程序流程的问题。通过将异常指针保存下来,我们可以在合适的时机重新抛出异常或执行其他操作,以便更好地处理异常情况。

相关推荐
ShineSpark44 分钟前
Crashpad 在windows下编译和使用指南
c++·windows
fl1768311 小时前
基于python的天气预报系统设计和可视化数据分析源码+报告
开发语言·python·数据分析
ACP广源盛139246256731 小时前
(ACP广源盛)GSV6172---MIPI/LVDS 信号转换为 Type-C/DisplayPort 1.4/HDMI 2.0 并集成嵌入式 MCU
c语言·开发语言·单片机·嵌入式硬件·音视频
不穿格子的程序员1 小时前
从零开始刷算法-栈-括号匹配
java·开发语言·
雪域迷影2 小时前
C#中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·http·c#·get
yue0082 小时前
C#类继承
java·开发语言·c#
Want5952 小时前
Python汤姆猫
开发语言·python
Larry_Yanan2 小时前
QML学习笔记(五十)QML与C++交互:QML中单例C++对象
开发语言·c++·笔记·qt·学习·ui·交互
im_AMBER2 小时前
算法笔记 09
c语言·数据结构·c++·笔记·学习·算法·排序算法
凯芸呢2 小时前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea