यहां हम देखेंगे कि स्टैक अनवाइंडिंग का क्या अर्थ है। जब हम कुछ फंक्शन कॉल करते हैं, तो यह एड्रेस को कॉल स्टैक में संग्रहीत करता है, और फंक्शन से वापस आने के बाद, उस एड्रेस को पॉप आउट करता है जहां इसे छोड़ा गया था।
स्टैक अनवाइंडिंग एक प्रक्रिया है जहां रनटाइम पर फंक्शन कॉल स्टैक एंट्री को हटा दिया जाता है। स्टैक एलिमेंट्स को हटाने के लिए, हम एक्सेप्शन का उपयोग कर सकते हैं। यदि कोई एक्सेप्शन आंतरिक फंक्शन से फेंका जाता है, तो स्टैक की सभी एंट्री हटा दी जाती हैं, और मुख्य इन्वोकर फंक्शन पर वापस आ जाता है।
आइए एक उदाहरण के माध्यम से स्टैक अनवाइंडिंग का प्रभाव देखें।
उदाहरण कोड
#include <iostream> using namespace std; void function1() throw (int) { //यह फंक्शन एक्सेप्शन फेंकता है cout<<"\n Entering into function 1"; throw 100; cout<<"\n Exiting function 1"; } void function2() throw (int) { //यह फंक्शन फंक्शन 1 को कॉल करता है cout<<"\n Entering into function 2"; function1(); cout<<"\n Exiting function 2"; } void function3() { // फंक्शन 2 को कॉल करने और फंक्शन 1 द्वारा फेंके गए एक्सेप्शन को संभालने के लिए फंक्शन cout<<"\n Entering function 3 "; try { function2(); // फंक्शन 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 में। उसके बाद एक एक्सेप्शन होता है, इसलिए यह स्टैक से सभी जानकारी हटा देता है, और फिर से फंक्शन 3 पर वापस आ जाता है।