函数模板
<exception>

std::make_exception_ptr

template <class E>  exception_ptr make_exception_ptr (E e) noexcept;
创建 exception_ptr
返回一个指向 e 副本的 exception_ptr 对象。

此函数模板的行为等同于
1
2
3
4
5
6
7
template <class E> exception_ptr make_exception_ptr (E e) noexcept {
  try {
     throw e;
  } catch(...) {
     return current_exception();
  }
}

exception_ptr 是一种共享智能指针类型:只要至少一个 exception_ptr 指向它,它所指向的异常就保证保持有效。更多信息请参阅 exception_ptr

此函数不抛出异常,但如果函数实现为返回指向当前处理的异常副本的指针,如果它无法分配存储空间(bad_alloc)或复制过程失败(如果可能,则返回抛出的异常或 bad_exception;否则返回其他未指定的值),则它可能会返回指向不同异常的指针。

参数

e
一个对象或引用。

返回值

一个指向异常对象exception_ptr 对象,或者如果函数的内部过程会引发新异常,则指向另一个异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// make_exception_ptr example
#include <iostream>       // std::cout
#include <exception>      // std::make_exception_ptr, std::rethrow_exception
#include <stdexcept>      // std::logic_error

int main () {
  auto p = std::make_exception_ptr(std::logic_error("logic_error"));

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

输出

exception caught: logic_error


数据竞争

返回的对象指向 e 的副本。

异常安全

无异常保证:此函数不抛出异常。相反,此函数使用其返回值来指示其内部操作期间抛出的异常。

另见