Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Stack คลี่คลายใน C ++


ที่นี่เราจะเห็นความหมายของการคลี่คลายกองคืออะไร เมื่อเราเรียกใช้ฟังก์ชันบางอย่าง จะเก็บที่อยู่ไว้ใน 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 อีกครั้ง