अपवाद वर्ग में एक सेटटर सदस्य फ़ंक्शन होने का क्या प्रभाव हो सकता है? एक सेटर रखने के लिए प्रेरणा यह है कि कभी-कभी पकड़ के बिंदु पर अपवाद को सही तरीके से संभालने के लिए फेंकने के बिंदु पर पर्याप्त डेटा उपलब्ध नहीं होता है; इसलिए जब स्टैक अवांछित हो रहा है तो अतिरिक्त जानकारी को जोड़ना होगा।अपवाद वर्ग में सेटर
उत्तर
जबकि आप मूल अपवाद चिकित्सक कर सकते थे, मैं जावा में उपयोग की जाने वाली तकनीक को पसंद करूंगा: आप मूल को पकड़ते हैं और एक नया अपवाद फेंक देते हैं जो मूल को इसके कारण के रूप में संदर्भित करता है।
@ आओन: और आपने अभी स्टैक फ्रेम खो दिया है ... –
@ मैथ्यूयू: सहमत। यदि आप एक नया अपवाद फेंकते हैं, तो आप स्टैक डीबगिंग जानकारी खो देते हैं। – Puppy
मूलभूत एम्बेडिंग आपको स्लाइसिंग समस्या पर उजागर कर सकती है, यदि आप बेस क्लास पकड़ते हैं लेकिन पकड़ा अपवाद कुछ व्युत्पन्न होता है। आपको पॉइंटर द्वारा फेंकने और पकड़ने की आवश्यकता होगी, लेकिन यह सामान्य नहीं है और स्वयं की कुछ समस्याएं पैदा करता है। –
सबसे पहले, यह एक अच्छा विचार की तरह लगता है।
मैं सी ++ अपवाद हैंडलिंग की बजाय एसईएच (विंडोज़-विशिष्ट अपवाद हैंडलिंग, सी ++ से संबंधित नहीं) का उपयोग करता हूं। विशेष रूप से इसके कारण - यह स्टैक अनचाहे शुरू होने से पहले अधिक जानकारी एकत्र करने की अनुमति देता है।
लेकिन मैंने कभी ऐसा प्रकार फेंकने के बारे में सोचा नहीं है जो जानकारी एकत्रित करेगा।
तकनीकी रूप से बोलने - कोई समस्या नहीं है। मुझे पता है कि एमएसवीसी (असेंबलर स्तर तक) द्वारा अपवाद हैंडलिंग कैसे कार्यान्वित किया जाता है, और इस विचार के साथ कुछ भी गलत नहीं है।
catch
ब्लॉक के बाद ढेर खुला हुआ किया गया है शुरू हो जाती है: कुछ बिंदुओं कि उल्लेख किया जाना चाहिए वहाँ। ताकि उचितtry
ब्लॉक के भीतर सब कुछ पहले से ही नष्ट हो गया है।- एक अपवाद को रेथ्रोइंग एक महत्वपूर्ण प्रदर्शन हिट का कारण बनता है।
मुझे लगता है कि अंतर्निहित समस्या यह है कि फेंकने (निम्न-स्तरीय) कोड में कोड के रूप में अधिक संदर्भ/जानकारी नहीं होती है।
आप या तो एक नया अपवाद बना सकते हैं जो अपवाद का बेहतर वर्णन करता है, मूल अपवाद को आंतरिक अपवाद के रूप में लपेटता है। मैंने इसे कुछ बार किया है लेकिन मुझे एहसास है कि यह सभी परिस्थितियों में शायद ही व्यावहारिक है।
मुझे पता है कि कुछ ढांचे में "डेटा" -प्रोपर्टी है जो मनमाने ढंग से डेटा के साथ एक या अधिक शब्दकोश है। यह मेरे लिए बुरा नहीं लगता है, हालांकि यह दुर्व्यवहार के लिए खुलता है। इसे प्रोग्रामेटिक फैसले बनाने के लिए शायद इस्तेमाल नहीं किया जाना चाहिए, यह मानव उपभोग के लिए होना चाहिए।
अगर कुछ अपवाद पकड़ता है, और पैरामीटर एक्स के आधार पर निर्णय लेता है तो यह काफी गन्दा हो सकता है।
चेक बाहर Boost.Exception पुस्तकालय और बहुत सटीक रूप शीर्षक से सक्रिय अपवाद को मनमाने ढंग से डेटा का जोड़ना पैराग्राफ में this page ऑब्जेक्ट्स:
void parse_file(char const * file_name)
{
boost::shared_ptr<FILE> f = file_open(file_name,"rb");
assert(f);
try
{
char buf[1024];
file_read(f.get(), buf, sizeof(buf));
}
catch(boost::exception & e)
{
e << boost::errinfo_file_name(file_name);
throw;
}
}
व्यक्तिगत तौर पर मैं कलाओं बहुत प्रभावी हैं। अपवाद को संशोधित करें (संदर्भ जोड़ना) और पुनर्स्थापित करें।
जावा के विपरीत, सी ++ में आप तय करते हैं कि आप अपना अपवाद बनाते समय स्टैक फ्रेम शामिल करते हैं या नहीं, तो आप इसे खोने का जोखिम नहीं उठाते हैं और यह अभी भी उस कोड के बिंदु को संदर्भित करेगा जो फेंक दिया गया है महत्वपूर्ण संदर्भ होने पर पहला अपवाद।
बूस्ट में इसे ढूंढना तकनीक के अच्छे समर्थन की तरह लगता है, भले ही आप बूस्ट का उपयोग करना पसंद न करें। –
- 1. डाटा बाध्यकारी और सेटर में अपवाद फेंक
- 2. एक वर्ग श्रेणी में अधिभावी संपत्ति सेटर
- 3. सेटर
- 4. सेटर
- 5. प्रबंधन अपवाद - अमान्य वर्ग
- 6. रनटाइम अपवाद: वर्ग खंड
- 7. वर्ग डाली अपवाद
- 8. जावा: बनाएं स्थिर वर्ग के सदस्य जिसका निर्माता एक अपवाद
- 9. शैली सेटर में ContextMenu
- 10. जावा: अपवाद-फेंकने वाला वर्ग?
- 11. बूस्ट। पायथन कस्टम अपवाद वर्ग
- 12. एक सेटर
- 13. जर्सी/जैक्सन @JsonIgnore सेटर
- 14. गेटटर/सेटर
- 15. स्प्रिंग सेटर विधि ऑर्डर
- 16. सी # एक सेटर विधि
- 17. प्रॉपर्टी सेटर
- 18. गेटटर/सेटर
- 19. अगर किसी विशेषता में कोई सार्वजनिक सेटर
- 20. सेटर विधियों में $ 1 वापस क्यों करें?
- 21. ओओपी: गेटर/सेटर विधियां
- 22. कस्टम अपवाद वर्ग - अपवाद या थॉवेबल से विस्तारित है?
- 23. जावा: अपवाद वर्ग थ्रेड-सुरक्षित है?
- 24. एंड्रॉयड विजुअलाइज़र वर्ग फेंक क्रम अपवाद
- 25. अपवाद: 'IValueConverter' प्रकार एक सार्वजनिक TypeConverter वर्ग
- 26. अपवाद: वर्ग नहीं खोजा जा सका SolrCoreAware
- 27. सी #, मेट्रो एप्लिकेशन, कस्टम अपवाद वर्ग
- 28. सार्वजनिक गेटर के साथ सार संपत्ति, कंक्रीट वर्ग में निजी सेटर को परिभाषित करें?
- 29. क्यों मैं एक अपवाद वर्ग में एक auto_ptr
- 30. हो रही वर्ग अपवाद जब ग्रहण में चल
एक उचित विचार की तरह लगता है। – Jay
और कौन सा कोड चल रहा है * जबकि * ढेर अवांछित है? – Anon
उसका मतलब है एक और पकड़ ब्लॉक में। – Skurmedel