अपवादों को फेंकने और पकड़ने का पारंपरिक तरीका एक अपवाद वस्तु को फेंकना और इसे संदर्भ (आमतौर पर const
संदर्भ) द्वारा पकड़ना है । C ++ भाषा को अपवाद वस्तु के निर्माण के लिए उपयुक्त कोड उत्पन्न करने और उचित समय पर इसे ठीक से साफ करने के लिए कंपाइलर की आवश्यकता होती है।
डायनेमिक रूप से आवंटित ऑब्जेक्ट के लिए पॉइंटर को फेंकना एक अच्छा विचार नहीं है। अपवाद आपको त्रुटि स्थितियों का सामना करने के लिए अधिक मजबूत कोड लिखने में सक्षम करने वाले हैं। यदि आप पारंपरिक तरीके से अपवाद वस्तु को फेंकते हैं, तो आप यह सुनिश्चित कर सकते हैं कि क्या यह एक पकड़ने वाले क्लॉज द्वारा सही प्रकार का नामकरण पकड़ा गया है catch (...)
, चाहे वह फिर से फेंका गया हो या नहीं, यह उचित समय पर सही तरीके से नष्ट हो जाएगा। (एकमात्र अपवाद यदि यह कभी भी पकड़ा नहीं गया है लेकिन यह एक गैर-वसूली योग्य स्थिति है जो भी आप इसे देखते हैं।)
यदि आप एक डायनेमिक रूप से आवंटित ऑब्जेक्ट के लिए एक पॉइंटर फेंकते हैं, तो आपको यह सुनिश्चित करना होगा कि कॉल स्टैक जो भी बिंदु पर दिखता है, आप अपना अपवाद फेंकना चाहते हैं, एक कैच ब्लॉक है जो सही पॉइंटर प्रकार को नाम देता है और उपयुक्त delete
कॉल है। आपके अपवाद को catch (...)
तब तक कभी भी नहीं पकड़ा जाना चाहिए जब तक कि वह अपवाद उस अपवाद को दोबारा न फेंक दे, जो तब दूसरे कैच ब्लॉक द्वारा पकड़ा जाता है, जो अपवाद के साथ सही तरीके से व्यवहार करता है।
प्रभावी रूप से, इसका मतलब है कि आपने अपवाद हैंडलिंग सुविधा ले ली है जिससे मजबूत कोड लिखना आसान हो जाए और कोड लिखना बहुत कठिन हो जाए जो सभी स्थितियों में सही हो। यह इस मुद्दे को छोड़ रहा है कि क्लाइंट कोड के लिए लाइब्रेरी कोड के रूप में कार्य करना लगभग असंभव होगा जो इस सुविधा की उम्मीद नहीं करेगा।
throw gcnew
कि यह उपयोगी होगा। यदि आप अपने अपवाद को पकड़ने के लिए प्रबंधित कोड चाहते हैं। क्या कोई मुझे उस पर सही कर सकता है?