मैं देख रहा हूं कि यहां कई उत्तर पोस्ट किए गए हैं जो काम पाने के लिए भाग्यशाली मामलों में पड़ेंगे, लेकिन उनमें से कोई भी दुर्घटनाग्रस्त होने के लिए 100% नियत नहीं है। कुछ एक हार्डवेयर और ओएस पर दुर्घटनाग्रस्त हो जाएंगे, अन्य नहीं करेंगे। हालाँकि, क्रैश करने के लिए आधिकारिक C ++ मानक के अनुसार एक मानक तरीका है।
से हवाला देते हुए सी ++ मानक आईएसओ / आईईसी 14882 §15.1-7 :
यदि अपवाद हैंडलिंग तंत्र, अपवाद ऑब्जेक्ट के आरंभीकरण को पूरा करने के बाद लेकिन अपवाद के लिए हैंडलर की सक्रियता से पहले, एक फ़ंक्शन को कॉल करता है जो अपवाद के माध्यम से बाहर निकलता है, तो std :: terminate कहा जाता है (15.5.1)।
struct C {
C() { }
C(const C&) {
if (std::uncaught_exceptions()) {
throw 0; // throw during copy to handler’s exception-declaration object (15.3)
}
}
};
int main() {
try {
throw C(); // calls std::terminate() if construction of the handler’s
// exception-declaration object is not elided (12.8)
} catch(C) { }
}
मैंने इसे प्रदर्शित करने के लिए एक छोटा कोड लिखा है और यहाँ Ideone पर पाया और आजमाया जा सकता है ।
class MyClass{
public:
~MyClass() throw(int) { throw 0;}
};
int main() {
try {
MyClass myobj; // its destructor will cause an exception
// This is another exception along with exception due to destructor of myobj and will cause app to terminate
throw 1; // It could be some function call which can result in exception.
}
catch(...)
{
std::cout<<"Exception catched"<<endl;
}
return 0;
}
आईएसओ / आईईसी 14882 .115.1 / 9 उल्लेख बिना प्रयास किए ब्लॉक को फेंकने के परिणामस्वरूप गर्भपात के लिए निहित है।
यदि कोई अपवाद वर्तमान में संभाला नहीं जा रहा है, तो कोई ऑपरेंड कॉल के साथ थ्रो-अभिव्यक्ति निष्पादित करना std :: terminate ()
अन्य में शामिल हैं: विध्वंसक से फेंक: आईएसओ / आईईसी 14882 /15.2 / 3
asm { cli; };