अपवादों के बिना आप मानक सी ++ लाइब्रेरी का उपयोग कैसे कर सकते हैं? मैं मेरी लाइब्रेरी में कुछ वैक्टर का उपयोग करता हूं। मुझे कैसे पता चलेगा कि push_back फ़ंक्शन वास्तव में सफल हुआ है या नहीं? क्या एक अपवाद हुआ है या यह सिर्फ बाहर निकलने (1) या कुछ करने के बारे में जानने का कोई मानक तरीका है?
सी ++ में अपवाद हैंडलिंग अक्षम करने के बाद आप बहुत ही प्रतिबंधित क्षेत्र में जा रहे हैं।
कुछ मानक लाइब्रेरी कार्यान्वयन, जैसे कि डंकमवेयर, एक अपवाद अक्षम करने की अनुमति देता है। वहां मैक्रो, _HAS_EXCEPTIONS को 0 के रूप में परिभाषित करने का मामला है। एसटीएलपोर्ट के पास _STLP_USE_EXCEPTIONS = 0 के साथ एक समान सम्मेलन है।
हालांकि, अपवाद अक्षम होने पर मानक पुस्तकालयों को क्या करना चाहिए इसकी कोई मानक परिभाषा नहीं है। अधिकांश भाग के लिए अपवाद-हैंडलिंग, सी ++ भाषा में बहुत अधिक है। यहां तक कि dynamic_cast
और operator new/new[]
डिफ़ॉल्ट रूप से फेंकते हैं और वे लाइब्रेरी सुविधाएं नहीं हैं।
मानक पुस्तकालय कार्यान्वयन के लिए भी क्या होना चाहिए इसकी स्पष्ट परिभाषा की कमी भी नहीं है जो फेंक नहीं देती है। यदि अनुक्रम push_back
उस अनुक्रम के लिए अधिक स्मृति आवंटित करने की प्रक्रिया में फेंकता है, तो क्या होना चाहिए? क्या तत्व बस सम्मिलित नहीं है? इन अनुक्रमों के मानक इंटरफेस निश्चित रूप से हमें इस बारे में कुछ भी नहीं बताते हैं कि ऐसी त्रुटि कब होती है।
इसके अलावा, सामान्य रूप से बहुत सारे सी ++ पुस्तकालय ऐसे कार्यों का उपयोग करेंगे जो ऑपरेटर की तरह फेंकते हैं (और नोट्रो संस्करण नहीं)। नतीजतन, हम अपवाद अक्षम करने के बाद बहुत सारे अपरिभाषित व्यवहार क्षेत्र में उद्यम करते हैं।
मुझे एक बार ऐसी कंपनी में काम करना पड़ा जो अपवाद-प्रबंधन से इंकार कर रहा था क्योंकि वरिष्ठ प्रोग्रामर प्रभारी समयपूर्व अनुकूलक थे, जिन्होंने सी को पसंद किया और सोचा कि सी ++ भयानक और अक्षम था (संयोग से, उन्होंने कुछ सबसे अक्षम कोड लिखा था लिंक्ड सूचियों के लिए एक डिफ़ॉल्ट कंटेनर के रूप में मजबूत वरीयता के साथ टीम जिसने हॉटिंग नॉट्स को सब कुछ के लिए आवंटित/हटाए जाने वाले छोटे नोड्स की भारी संख्या के कारण बाएं और दाएं दिखने के लिए प्रेरित किया है, लेकिन यह एक और कहानी है)।
एम्बेडेड सिस्टम के साथ, अपवाद हैंडलिंग के खिलाफ तर्क थोड़ा मजबूत हो सकता है, लेकिन सामान्य रूप से सी ++ पर भरोसा करना मुश्किल हो जाता है। मुझे लगता है कि अपवाद-हैंडलिंग के बिना आप जो भी कर सकते हैं, वह सी ++ के एक अपरिपक्व रूप को मानक पुस्तकालय भागों के बिना स्वीकार नहीं करता है, जब तक कि आप अपने विशेष मानक लाइब्रेरी विक्रेता को विशिष्ट कामकाज और चाल खोजने की कोशिश करने में बहुत समय व्यतीत नहीं करना चाहते जो इसके लायक से ज्यादा परेशानी हो सकती है।
http://stackoverflow.com/questions/3870435/handling-stl-errors-without-exceptions के संभावित डुप्लिकेट – Philipp