여기에서 스택 해제의 의미가 무엇인지 알 수 있습니다. 일부 함수를 호출하면 해당 주소를 호출 스택에 저장하고 함수에서 돌아온 후 해당 주소를 팝업하여 남아 있던 작업을 시작합니다.
스택 해제는 런타임에 함수 호출 스택 항목이 제거되는 프로세스입니다. 스택 요소를 제거하기 위해 예외를 사용할 수 있습니다. 내부 함수에서 예외가 발생하면 스택의 모든 항목이 제거되고 기본 호출자 함수로 돌아갑니다.
예제를 통해 스택 해제의 효과를 살펴보겠습니다.
예시 코드
#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으로 돌아갑니다.