सी ++ throw;
में जब कैच ब्लॉक के अंदर निष्पादित किया गया तो ब्लॉक के बाहर वर्तमान में पकड़े गए अपवाद को पुनर्स्थापित करता है।फेंकने पर क्या होता है; कैच ब्लॉक के बाहर कथन निष्पादित किया गया है?
this answer में अपवाद डिस्पैचर की एक विचार जब जटिल अपवाद संचालन अक्सर का उपयोग कर कोड दोहराव को कम करने के लिए एक समाधान के रूप में लाया जाता है:
try {
CodeThatMightThrow();
} catch(...) {
ExceptionHandler();
}
void ExceptionHandler()
{
try {
throw;
} catch(FileException* e) {
//do handling with some complex logic
delete e;
} catch(GenericException* e) {
//do handling with other complex logic
delete e;
}
}
एक सूचक फेंकने या तो इसे बाहर है एक मूल्य कोई फर्क नहीं पड़ता सवाल का
क्या होता है यदि अपवाद हैंडलर() को कैच ब्लॉक से नहीं कहा जाता है?
int main(int, char**)
{
try {
throw;
} catch(...) {
MessageBox(0, "", "", 0);
}
return 0;
}
पहले यह एक प्रथम मौका अपवाद इंगित करने के लिए डिबगर का कारण बनता है, तो तुरंत एक बिना क्रिया का अपवाद:
मैं VC7 के साथ इस कोड की कोशिश की। अगर मैं डीबगर के बाहर यह कोड चलाता हूं तो प्रोग्राम उसी तरह दुर्घटनाग्रस्त हो जाता है जैसे abort() को कॉल किया गया है।
ऐसी परिस्थितियों के लिए अपेक्षित व्यवहार क्या है?
"विंडोज़" टैग हटा दिया गया क्योंकि इसका विंडोज़ के साथ कुछ लेना देना नहीं है (लेकिन यह एक अच्छा सवाल है)। –