c++以exception_ptr传递异常

简介: 自C++11起,C++标准库提供一个能力:将异常存储于类型为exception_ptr的对象中,稍后才在其他情境(context)中处理它们:

这是我在c++标准库(第二版)中看见的一个知识点,感觉很有意思,故记录

自C++11起,C++标准库提供一个能力:将异常存储于类型为exception_ptr的对象中,稍后才在其他情境(context)中处理它们:

#include <exception>
std::exception_ptr eptr;//对象来保存异常(或nullptr)

void foo()
{
   
    try{
   
        throw ...;
    }
    catch(...){
   
        eptr = std::current_exception(); //保存当前异常以供以后处理
    }
}

void bar()
{
   
    if(eptr != nullptr){
   
        std::rethrow_exception(eptr);//进程保存异常
    }
}

current_exception()会返回一个exception_ptr对象,指向当前正被处理的异常。该异常会保持有效,直到没有任何exception_ptr 指向它。rethrow_exception()会重新抛出那个被存储的异常,因此bar()的作为就像是“最初在 foo()被抛出的那个异常发生于bar()之内”。

目录
相关文章
|
算法 编译器 C语言
【C++ 异常】C++ 标准库异常类及其应用
【C++ 异常】C++ 标准库异常类及其应用
237 0
|
安全 算法 C++
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误(三)
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误
306 0
|
2月前
|
安全 编译器 C++
C++异常详细介绍
C++异常详细介绍
288 10
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
150 0
|
安全 程序员 编译器
【C++】异常
C++异常处理机制允许在程序运行时出现错误时,通过`try`、`catch`和`throw`关键字将错误信息传递回调用栈,进行异常处理。它支持异常的重新抛出、自定义异常体系以及标准库提供的异常类层次结构,如`std::exception`及其派生类。异常处理提高了代码的健壮性和可维护性,但也带来了性能开销和代码复杂性等问题。合理使用异常机制,可以有效提升程序的稳定性和安全性。
230 3
|
SQL 安全 程序员
C++:异常
C++:异常
148 7
|
小程序 编译器 Linux
C++ 异常原理:以一个小程序为例
作者在调查某个 bug 时涉及到 C++ 异常,借此机会以本文把 C++ 异常机制梳理清楚供大家参考。
|
安全 Java 程序员
【C++】异常 -- 详解
【C++】异常 -- 详解
C++ 异常机制问题之捕获异常的问题如何解决
C++ 异常机制问题之捕获异常的问题如何解决
162 2
|
安全 Java 程序员
【C++11】异常知多少
【C++11】异常知多少
135 7