मैं अपवाद हैंडलिंग जो इस प्रकार है लेखन डेस्कटॉप अनुप्रयोग परियोजना के लिए क्यूटी 4.8 (C++) का उपयोग कर रहा है, और:कैच ब्लॉक में दोहराए गए कोड लिखने से कैसे बचें?
void callerMethod()
{
try
{
method1();
}
catch(Exception1& e)
{
// display critcal error message
// abort application
}
catch(std::Exception& e)
{
// print exception error message
}
catch(...)
{
// print unknown exception message
}
}
void method1()
{
try
{
// some initializations
// some operations (here exceptions can occur)
// clean-up code (for successful operation i.e no exception occurred)
}
catch(Exception1& e)
{
// clean-up code
throw e;
}
catch(Exception2& e)
{
// clean-up code
throw e;
}
catch(Exception3& e)
{
// clean-up code
throw e;
}
catch(...)
{
// clean-up code
throw;
}
}
तो मेरे सवाल का मैं हर कैच ब्लॉक में सफाई कोड लिखने की आवश्यकता क्यों है ? क्या कोई तरीका है कि मैं दोहराया कोड लिखने से बच सकता हूं?
नोट :: [Method1 में()] मैं फिर से फेंक के लिए अपवाद है जो करने के लिए हुआ मेरी caller.So मैं, एकल कैच ब्लॉक में उन्हें नहीं पकड़ सकते क्योंकि तब टाइप जानकारी चली जाएगी चाहते हैं ।
टी का प्रयास करें o स्मार्ट पॉइंटर्स, कंटेनर क्लासेस इत्यादि का उपयोग करके आवश्यक क्लीन-अप कोड की मात्रा को कम करें आदर्श रूप से कोई क्लीन-अप कोड नहीं होना चाहिए। – user763305
ऐसा प्रतीत होता है कि आप जो करना चाहते हैं वह बस {/ * फेंक सकता है * /} पकड़ सकता है (विशिष्ट_एक्सप्शन कॉन्स और ई) {/ * समाप्त * /} '। यदि आपको अपवाद प्रकार 'अपवाद 1',' अपवाद 2 'और अन्य पर ध्यान नहीं दिया जाता है, तो * उन्हें * पकड़ें नहीं। –
इसके अलावा, भले ही आप संदर्भ से पकड़ लें, आपको * फेंकने से रोकने के लिए 'फेंकने 'के बजाय' फेंक' का उपयोग करके पुनर्स्थापित करना चाहिए। – ereOn