C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- std::exception_ptr
- std::error_code
- std::error_condition
- std::terminate
- std::exception
- std::current_exception
- std::rethrow_exception
- std::make_exception_ptr
- std::unexpected
- std::uncaught_exception, std::uncaught_exceptions
- assert
- errno
- std::nested_exception
- std::throw_with_nested
- std::rethrow_if_nested
- std::terminate_handler
- std::get_terminate
- std::set_terminate
- std::bad_exception
- std::unexpected_handler
- std::get_unexpected
- std::set_unexpected
- 错误号
- std::logic_error
- std::invalid_argument
- std::domain_error
- std::length_error
- std::out_of_range
- std::runtime_error
- std::range_error
- std::overflow_error
- std::underflow_error
- std::tx_exception
- std::error_category
- std::generic_category
- std::system_category
- std::errc
- std::system_error
- 注释
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::exception_ptr
定义于头文件 <exception>
|
||
typedef /*unspecified*/ exception_ptr; |
(C++11 起) | |
std::exception_ptr
是一个类可空指针的类型,管理已抛出并为 std::current_exception 所捕捉的异常对象。 std::exception_ptr
的实例可传递给另一函数,可以在另一线程,在那里异常可能重抛并为 catch 子句所处理。
默认构造的 std::exception_ptr
是空指针;它不指向异常对象。
二个 std::exception_ptr
实例比较相等,仅若它们均为空或都指向同一异常对象。
std::exception_ptr
不可隐式转换为任何算术、枚举或指针类型。它可以按语境转换成 bool
,且若它为空则求值为 false ,否则为 true 。
一个 std::exception_ptr
所引用的异常对象只要为至少一个 std::exception_ptr
所引用就保持合法: std::exception_ptr
是共享所有权的智能指针(注意:这附加于异常对象生存期规则)
std::exception_ptr
满足可空指针 (NullablePointer) 的要求。
示例
运行此代码
#include <iostream> #include <string> #include <exception> #include <stdexcept> void handle_eptr(std::exception_ptr eptr) // 按值传递 ok { try { if (eptr) { std::rethrow_exception(eptr); } } catch(const std::exception& e) { std::cout << "Caught exception \"" << e.what() << "\"\n"; } } int main() { std::exception_ptr eptr; try { std::string().at(1); // 这生成一个 std::out_of_range } catch(...) { eptr = std::current_exception(); // 捕获 } handle_eptr(eptr); } // std::out_of_range 的析构函数调用于此,在 ept 析构时
输出:
Caught exception "basic_string::at"
参阅
(C++11) |
从异常对象创建一个std::exception_ptr (函数模板) |
(C++11) |
捕获当前异常到 std::exception_ptr 之中 (函数) |
(C++11) |
从一个 std::exception_ptr 抛出异常 (函数) |