Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

<exception_ptr>

类型   <exception>

异常指针
可以引用异常对象的智能指针类型。

它是一个共享的类指针类型:只要至少有一个exception_ptr指向它,被指向的异常就保证保持有效, 从而可能将其生存期扩展到catch语句的作用域之外或跨线程。

不同的库可能会以不同的方式实现此类型,但它至少应该支持以下操作而不引发:

还要求该类型不能隐式转换为算术、枚举或指针类型。

如果库实现支持对对象执行任何其他操作(如解除对其引用),则会导致未定义的行为。

该类型的对象可以通过调用:current_exception、make_exception_ptr或nested_exception::nested_ptr获得, 可以通过调用rethrow_exception重新抛出指向的异常来访问。

☣  示例



// exception_ptr example
#include <iostream>       // std::cout
#include <exception>      // std::exception_ptr, std::current_exception, std::rethrow_exception
#include <stdexcept>      // std::logic_error

int main () {
  std::exception_ptr p;
  try {
     throw std::logic_error("some logic_error exception");   // throws
  } catch(const std::exception& e) {
     p = std::current_exception();
     std::cout << "exception caught, but continuing...\n";
  }

  std::cout << "(after exception)\n";

  try {
     std::rethrow_exception (p);
  } catch (const std::exception& e) {
     std::cout << "exception caught: " << e.what() << '\n';
  }
  return 0;
}

输出:
exception caught, but continuing...
(after exception)
exception caught: some logic_error exception

⇄ 数据竞争


exception_ptr对象(如上所述)可移植支持的任何操作都不能访问或修改指向的异常对象。

该类不向异常对象提供额外的同步保证。

☂ 异常安全性



无抛出保证:没有成员抛出异常。

注意,对对象执行任何不受显式支持的操作(如上所述)都会导致未定义的行为。

🍄  另请参阅



current_exception 获取指向当前异常的智能指针 (函数)
rethrow_exception 重新抛出异常(函数)
nested_exception 嵌套异常 (类)

联系我们 免责声明 关于CandCplus 网站地图