यहां हम देखेंगे कि स्टैक अनइंडिंग का अर्थ क्या है। जब हम कुछ फ़ंक्शन को कॉल करते हैं, तो यह पते को कॉल स्टैक में संग्रहीत करता है, और फ़ंक्शन से वापस आने के बाद, पते को उस स्थान पर शुरू करने के लिए पॉप आउट करता है जहां से यह छोड़ा गया था।
स्टैक अनइंडिंग एक ऐसी प्रक्रिया है जहां फ़ंक्शन कॉल स्टैक प्रविष्टियां रनटाइम पर हटा दी जाती हैं। स्टैक तत्वों को हटाने के लिए, हम अपवादों का उपयोग कर सकते हैं। यदि आंतरिक फ़ंक्शन से एक अपवाद फेंका जाता है, तो स्टैक की सभी प्रविष्टियां हटा दी जाती हैं, और मुख्य आवेदक फ़ंक्शन पर वापस आ जाती हैं।
आइए एक उदाहरण के माध्यम से स्टैक अनइंडिंग के प्रभाव को देखें।
उदाहरण कोड
#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
यहां हम देख सकते हैं कि नियंत्रण फ़ंक्शन 3 की जानकारी संग्रहीत करता है, फिर फ़ंक्शन 2 में प्रवेश करता है, और फिर फ़ंक्शन 1 में। उसके बाद एक अपवाद होता है, इसलिए यह स्टैक से सभी जानकारी को हटा देता है, और फिर से function3 पर वापस आ जाता है।