ที่นี่เราจะเห็นความหมายของการคลี่คลายกองคืออะไร เมื่อเราเรียกใช้ฟังก์ชันบางอย่าง จะเก็บที่อยู่ไว้ใน call stack และหลังจากกลับมาจากฟังก์ชันแล้ว จะแสดงที่อยู่เพื่อเริ่มทำงานในตำแหน่งที่เหลือ
การคลายสแต็กเป็นกระบวนการที่รายการสแต็กการเรียกใช้ฟังก์ชันจะถูกลบออกเมื่อรันไทม์ ในการลบองค์ประกอบสแต็ก เราสามารถใช้ข้อยกเว้นได้ หากมีข้อยกเว้นจากฟังก์ชันภายใน รายการทั้งหมดของสแต็กจะถูกลบออก และกลับสู่ฟังก์ชันผู้เรียกใช้หลัก
ให้เราดูผลของการคลายสแต็กผ่านตัวอย่าง
โค้ดตัวอย่าง
#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 อีกครั้ง