c++ - catching exception objects by reference, temporaries, lifetime issues -
निम्न कोड पर विचार करें:
#include & lt; iostream & gt; # शामिल करें & lt; stdexcept & gt; Void foo () {std :: runtime_error ("कब तक मैं रहते हैं?"); } Int main () {try {foo ()} } पकड़ (std :: runtime_error & amp; e) {std :: cout & lt; & lt; E.what () & lt; & lt; std :: endl; }}
मैं संदर्भ से अपवाद क्यों पकड़ सकता हूं, std :: runtime_error ("कब तक मैं रहते हैं?")
एक rvalue < / P>
कैच ब्लॉक में अपवाद ऑब्जेक्ट अभी भी कैसे जीवित है?
जहां बिल्कुल अपवाद ऑब्जेक्ट्स को संग्रहीत किया जाता है? उनका जीवनकाल क्या है?
सी ++ मानक में पैरा 15.1.4:
अपवाद के अस्थायी प्रतिलिपि के लिए स्मृति को अनिर्दिष्ट तरीके से आवंटित किया जाता है, सिवाय इसके कि 3.7.3.1 में वर्णित है। अस्थायी तब तक बनी रहती है जब तक कि उस अपवाद के लिए एक हैंडलर को निष्पादित किया जा रहा हो विशेष रूप से, यदि कोई हैंडलर एक थ्रो निष्पादित करके बाहर निकलता है; बयान, जो एक ही अपवाद के लिए किसी अन्य हैंडलर पर नियंत्रण से गुज़रता है, इसलिए अस्थायी बचे हुए। जब आखिरी हैंडलर को निष्कासन के लिए निष्पादित किया जायेगा, तो उसे छोड़ने के अलावा किसी भी तरह से निकल जाएगा; अस्थायी ऑब्जेक्ट को नष्ट कर दिया जाता है और अस्थायी ऑब्जेक्ट के लिए कार्यान्वयन मेमोरी को हटा सकता है; ऐसे किसी भी तरह के deallocation एक अनिर्दिष्ट तरीके से किया जाता है। हेडलर में अपवाद-घोषणा में घोषित वस्तु के विनाश के तुरंत बाद विनाश होता है।
ध्यान दें कि, सी ++ - मानक बात में, एक हैंडलर पकड़ता है कोड> सही तर्क प्रकार के साथ ब्लॉक करें।
Comments
Post a Comment