दिलचस्प पोस्ट
नाएन NaN के बराबर क्यों है? स्प्रिंग @ जेसनइंजोरोर काम नहीं कर रहा है PHP में एक भाषा के निर्माण और "अंतर्निर्मित" फ़ंक्शंस में क्या फर्क है? स्टोरीबोर्ड का उपयोग कब करें और XIBs का उपयोग कब करें session_start लटका हुआ है दो भिन्न सर्वर से तालिकाओं में शामिल हों मुख्य टैब बार नियंत्रक से पहले लॉगिन दृश्य नियंत्रक दिखा रहा है MATLAB स्मृति से बाहर चल रहा है लेकिन यह नहीं होना चाहिए शर्तों, गुण और कस्टम क्रियाओं के साथ Wix इंटरैक्शन JavaFX LineChart पर आकार कैसे जोड़ें I एंड्रॉइड एनडीके के साथ SQLite Django / South का उपयोग कर एक मॉडल का नाम बदलने का सबसे आसान तरीका है? जावा में टाइमस्टैम्प तिथि को कैसे परिवर्तित करें? कैसे आर में शामिल पार करने के लिए? सी # में एक सार वर्ग के कन्स्ट्रक्टर

सी ++ ब्लॉक – मूल्य या संदर्भ से अपवाद पकड़ो?

संभव डुप्लिकेट:
सी ++ में पॉइंटर द्वारा अपवाद को पकड़ो

मैं हमेशा मूल्य से अपवाद पकड़ जैसे

try{ ... } catch(CustomException e){ ... } 

लेकिन मुझे कुछ कोड मिल गया है जो बदले में catch(CustomException &e) को catch(CustomException &e) लिया गया था। क्या यह क) ठीक है ख) गलत c) एक ग्रे क्षेत्र?

Solutions Collecting From Web of "सी ++ ब्लॉक – मूल्य या संदर्भ से अपवाद पकड़ो?"

सी ++ में अपवादों के लिए मानक अभ्यास है …

मूल्य से फेंको, संदर्भ से पकड़ो

विरासत पदानुक्रम के चेहरे में मूल्य से पकड़ना समस्याग्रस्त है। अपने उदाहरण के लिए मान लें कि एक अन्य प्रकार MyException जो MyException से विरासत में मिली है और एक त्रुटि कोड जैसी आइटम ओवरराइड करता है। यदि कोई MyException प्रकार को आपके कैच ब्लॉक को फेंका गया था, तो उसे MyException इंस्टेंस में कनवर्ट किया जा सकता है, जिससे त्रुटि कोड को बदलना होगा।

संदर्भ

मान से पकड़ अपवाद ऑब्जेक्ट को टुकड़ा करेगा यदि अपवाद उस प्रकार के व्युत्पन्न प्रकार का होता है जिसे आप पकड़ते हैं।

यह आपके कैच ब्लॉकों में तर्क के लिए हो सकता है या हो सकता है, लेकिन const संदर्भ से पकड़ने के लिए कोई कारण नहीं है।

ध्यान दें कि यदि आप throw; किसी कैच ब्लॉक में किसी पैरामीटर के बिना, मूल अपवाद फिर से उभरा है या नहीं, आप एक कटा हुआ कॉपी या अपवाद ऑब्जेक्ट के संदर्भ को पकड़ लेते हैं।

जब तक आप अपवाद के साथ बेवकूफ बनाना नहीं चाहते हैं, आपको आम तौर पर एक कॉन्फ्रेंस संदर्भ का उपयोग करना चाहिए: catch (const CustomException& e) { ... } । कम्पाइलर फेंक दिया वस्तु के जीवनकाल के साथ सौदों।

में (CustomException e) CustomException का नया ऑब्जेक्ट बनाया गया है … तो यह कन्स्ट्रक्टर को (कस्टम एक्सपॉशन एंड ई) में कहा जाएगा, यह सिर्फ संदर्भ होगा … नयी ऑब्जेक्ट बनाई गई है और कोई कन्स्ट्रक्टर नहीं कहा जाएगा … औपचारिक थोड़ा सा ओवरहेड है … बाद में उपयोग करने के लिए बेहतर है …