यदि कोई अपवाद बेकार है, तो मानक परिभाषित नहीं करता है कि स्टैक अवांछित है या नहीं। तो कुछ प्लेटफार्मों पर विनाशकों को बुलाया जाएगा, और दूसरों पर कार्यक्रम तुरंत समाप्त हो जाएगा। शीर्ष स्तर पर पकड़ने से यह सुनिश्चित होता है कि विनाशकों को हमेशा बुलाया जाता है।
इसलिए, यदि आप डीबगर के अंतर्गत चल नहीं कर रहे हैं, यह शायद बुद्धिमान सब कुछ को पकड़ने के लिए है: (...) के साथ-साथ std :: अपवाद। फिर आपका आवेदन कोड एक घातक अपवाद पर भी आरएआईआई के साथ साफ कर सकता है। ऐसे कई मामलों में आपको वास्तव में साफ करने की आवश्यकता नहीं है, क्योंकि ओएस आपके लिए यह करेगा। लेकिन उदाहरण के लिए आप संभवतः दूरस्थ सेवाओं से डिस्कनेक्ट करना पसंद कर सकते हैं, और प्रक्रिया के बाहरी संसाधन हो सकते हैं, जैसे नामित पाइप/म्यूटेक्स, जिन्हें आप लीक करने के बजाय नष्ट करना पसंद करते हैं।
मुख्य में अपवाद Rethrowing, सीमित उपयोग की मुझे लगता है के बाद से आप पहले से ही संदर्भ में यह मूल रूप से फेंक दिया गया था खो दिया है। मुझे लगता है कि डीबगर में एक अपरिपक्व अपवाद को फँसाना सिर्फ std :: cerr में गलती को लॉग करने की तुलना में शोर है, इसलिए अगर लॉगिंग खोने का मौका मिलता है तो फिर से चलना स्मार्ट कदम होगा।
यदि आप डिबगर मोड में अप्रत्याशित परिस्थितियों को फंसाने के लिए डीबगर चाहते हैं, जो रिहाई मोड में एक अपवाद फेंक देता है जिसके परिणामस्वरूप अंततः बाहर निकलता है, तो अपवाद को छोड़ने के अलावा ऐसा करने के अन्य तरीके भी हैं ताकि डीबगर इसे देख सके ।उदाहरण के लिए, आप जोर मैक्रोज़ का उपयोग कर सकते हैं। बेशक, यह अप्रत्याशित और अप्रत्याशित स्थितियों में मदद नहीं करता है, जैसे हार्डवेयर अपवाद यदि आप .NET पर SEH का उपयोग कर रहे हैं।
स्रोत
2008-12-15 12:57:27
इसे कैसे निगल लिया जा सकता है? कोड अपवाद संदेश प्रिंट करता है, और फिर बाहर निकलता है। आप और क्या कर सकते हैं यदि आप अपवाद को पुनर्स्थापित करते हैं, तो इसे कौन देखेगा? इसे पकड़ा जाएगा? यह कार्यक्रम के प्रवेश बिंदु है, आखिरकार। – jalf