c++以exception_ptr传递异常

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

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

#include 
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++)