try{exampleFunction(1);// Try changing this to 2 or another value
}catch(conststd::runtime_error&re){std::cerr<<"Caught a runtime error: "<<re.what()<<std::endl;}catch(conststd::logic_error&le){std::cerr<<"Caught a logic error: "<<le.what()<<std::endl;}catch(...){std::cerr<<"Caught an unknown exception."<<std::endl;}
2.2 堆栈展开(Stack Unwinding)
当异常抛出时:
逆序销毁对象:
堆栈上的所有本地对象会按照构造的逆序依次调用其析构函数.
异常传播:
如果当前函数中没有匹配的catch块, 异常会继续向调用链的上一层传播, 直到找到匹配的处理器.
如果最终未捕获异常, 则会调用std::terminate().
示例: 堆栈展开
输出结果:
Constructing A
Constructing B
Constructing C
Destructing C
Destructing B
Caught exception: Error in C
Destructing A