C++ 中的栈展开


在这里,我们将了解堆栈展开的含义。当我们调用一些函数时,它将地址存储到调用堆栈中,然后在从函数返回后弹出地址,从其离开的位置开始工作。

堆栈展开是一个在运行时删除函数调用堆栈条目的过程。要删除堆栈元素,我们可以使用异常。如果从内部函数抛出异常,则将删除堆栈中的所有条目,并返回到主调用函数。

让我们通过一个示例了解堆栈展开的效果。

示例代码

#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。

更新时间:30-Jul-2019

1K+ 浏览

启动你的 事业

通过完成课程获得认证

开始
广告
© . All rights reserved.