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