在这里,我们将了解堆栈展开的含义。当我们调用某些函数时,它将地址存储到调用堆栈中,然后从这些函数返回后,弹出该地址以开始其剩余的工作。
堆栈展开是一个在运行时删除函数调用堆栈条目的过程。要删除堆栈元素,我们可以使用异常。如果从内部函数引发异常,那么将删除堆栈的所有条目,并返回到主调用程序函数。
让我们通过一个示例来了解堆栈展开的效果。
#include <iostream> using namespace std; void function1() throw (int) { //this function throws exception cout<<"\n Entering into function 1"; throw 100; cout<<"\n Exiting function 1"; } void function2() throw (int) { //This function calls function 1 cout<<"\n Entering into function 2"; function1(); cout<<"\n Exiting function 2"; } void function3() { //function to call function2, and handle exception thrown by function1 cout<<"\n Entering function 3 "; try { function2(); //try to execute function 2 } catch(int i) { cout<<"\n Caught Exception: "<<i; } cout<<"\n Exiting function 3"; } int main() { function3(); return 0; }
输出结果
Entering function 3 Entering into function 2 Entering into function 1 Caught Exception: 100 Exiting function 3
在这里,我们可以看到控件存储了function3的信息,然后进入function2,然后进入function1。发生该异常后,它将从堆栈中删除所有信息,然后再次返回到function3。