std::
make_exception_ptr
函数模板 <exception>
template <class E>
exception_ptr make_exception_ptr (E e) noexcept;
|
构造exception_ptr
返回一个指向e的副本的exception_ptr对象。
这个函数模板的行为相当于:
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对象,或者如果函数内部进程会引发新的异常,则会出现其他异常。
☣ 示例
// 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的副本。
☂ 异常安全性
无抛出保证:该函数不抛出异常。相反,这个函数使用它的返回值来表示内部操作期间抛出的异常。
🍄 另请参阅