Computer >> Máy Tính >  >> Lập trình >> C ++

Stack Unwinding trong C ++

Ở đây chúng ta sẽ xem ý nghĩa của việc tháo cuộn ngăn xếp là gì. Khi chúng ta gọi một số hàm, nó sẽ lưu trữ địa chỉ vào ngăn xếp cuộc gọi và sau khi quay lại từ các hàm, bật ra địa chỉ để bắt đầu công việc mà nó đã được để lại.

Bỏ cuộn ngăn xếp là một quá trình trong đó các mục nhập ngăn xếp lệnh gọi hàm được gỡ bỏ trong thời gian chạy. Để loại bỏ các phần tử ngăn xếp, chúng ta có thể sử dụng các ngoại lệ. Nếu một ngoại lệ được ném ra khỏi hàm bên trong, thì tất cả các mục của ngăn xếp sẽ bị xóa và trở lại hàm gọi chính.

Hãy để chúng tôi xem tác dụng của việc mở cuộn ngăn xếp thông qua một ví dụ.

Mã mẫu

#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;
}

Đầu ra

Entering function 3
Entering into function 2
Entering into function 1
Caught Exception: 100
Exiting function 3

Ở đây chúng ta có thể thấy rằng điều khiển lưu trữ thông tin của function3, sau đó nhập vào function2 và sau đó vào function1. Sau đó, một ngoại lệ xảy ra, vì vậy nó sẽ xóa tất cả thông tin khỏi ngăn xếp và quay trở lại function3 một lần nữa.