आप एक try
/catch
ब्लॉक का उपयोग करना चाहिए।
जैसा कि अन्य ने पहले से ही उत्तर दिया है, __try
/__except
सामान्य अपवादों को पकड़ने के लिए एसईएच (विंडोज़ उत्पन्न त्रुटियों) को पकड़ने के लिए है।
सबसे महत्वपूर्ण बात यह है कि __try
और __catch
सी ++ विनाशक नहीं चला सकते हैं या अपवाद को फेंकने पर स्टैक को सही ढंग से खोल सकते हैं।
दुर्लभ मामलों को छोड़कर, आपको कभी भी एसईएच अपवादों को पकड़ने की कोशिश नहीं करनी चाहिए।
संपादित करें: ठीक है, मैं इस पर सकारात्मक था (यह हमेशा मुझे बताया गया है), लेकिन @ हंस का कहना है कि स्पष्ट रूप से एक कंपाइलर स्विच है जिसे आप इसे बदलने के लिए उपयोग कर सकते हैं। मुझे लगता है कि /EHa
पर डॉक्स भ्रामक हैं, या कम से कम अपूर्ण हैं, यहां क्या होता है। अगर कोई निश्चित दस्तावेज पाता है जो यह गलत साबित करता है, तो मैं खुशी से इस उत्तर को हटा दूंगा।
यहां तक कि अगर यह पता चला है यह झूठ है, आप अभी भी try
और catch
बस क्योंकि वे मानक हैं का उपयोग करते हुए __try
और __except
नहीं हैं चाहिए।
स्रोत
2010-09-16 20:56:44
तो यह ढेर को अनदेखा नहीं करता है? इसका मतलब यह है कि क्रैश रिपोर्टिंग सिस्टम के अलावा किसी अन्य चीज़ के रूप में '__try'/'__except' का उपयोग करना संभवतः एक बहुत बुरा विचार है, जबकि' try' /' catch' ब्लॉक में अपवाद से पुनर्प्राप्त करने में सक्षम होना आम है। –
@ डेविड: यह सही है। '__try' और' __except' कड़ाई से एक सी आधारित एपीआई/एबीआई हैं। –
मैंने देखा है कि इसके लिए एकमात्र अच्छा उपयोग विंडोज़ में बग की मात्रा से निपट रहा है (जैसे कि जब आप किसी डिवाइस को कॉपी करने का प्रयास करते थे तब क्या होता था)। तर्कसंगत रूप से वे हमेशा कहीं संकेतक होते हैं जहां विंडोज़ ने आपके लिए अपवाद पकड़ा होगा और इसे एक त्रुटि में अनुवादित किया होगा। (जिस तरह से वे काम करते हैं वह भी भयानक है, और बहुत ही x86-specific ...) –