मैं एक एमएफसी ऐप के लिए एक बड़े, उम्र बढ़ने कोड बेस पर काम कर रहा हूं। समय के साथ कई डेवलपर्स द्वारा कोड पर काम किया गया है, और नतीजतन, हमारे पास नए के साथ आवंटन विफलता की संभावना से निपटने के पूरे कोड में तीन अलग-अलग तरीके हैं।एमएफसी के बिना सी ++ स्थिर पुस्तकालय जो एमएफसी प्रोजेक्ट से जुड़े हैं bad_alloc या CMemoryException * फेंक दें?
पहला तरीका न्यू के परिणामस्वरूप न्यूल के लिए परीक्षण करना है। हम nothrownew.obj का उपयोग नहीं करते हैं, इसलिए यह स्पष्ट रूप से एक त्रुटि है जिसे साफ़ करने की आवश्यकता है।
दूसरा सीएममोरी अपवाद * पकड़ने के लिए है (हाँ, संकलक में सी ++ अपवाद सक्षम हैं)। जो मैं समझता हूं, एमएफसी मानक ऑपरेटर को ओवरराइड करता है, और इसके बजाए इस चीज़ को फेंकता है। मैं काफी हद तक निश्चित हूं कि यह दूसरी विधि एमएफसी एप्लिकेशन में ही सही है। एमएफसी अपने अजीब CMemoryException फेंकने संस्करण के साथ, नए ओवरराइड करता है।
आखिरी बार हमारे लोगों के आधार पर आता है जो सी ++ के साथ अच्छे हैं, लेकिन एमएफसी प्रोग्रामर नहीं हैं। वे कॉन्स std :: bad_alloc & पकड़ रहे हैं।
मुझे वास्तव में पता नहीं है कि एप्लिकेशन में जुड़े स्थिर पुस्तकालयों की अपेक्षा क्या है। यह कोड का विशाल बहुमत था जो bad_alloc जीवन का उपयोग करता है। इन पुस्तकालयों को मानना एमएफसी या एटीएल के साथ संकलित नहीं है, और केवल मानक सी ++ में लिखे गए हैं, क्या वे bad_alloc को पकड़ने की उम्मीद कर सकते हैं? या एमएफसी की उपस्थिति में वे वैश्विक नए ऑपरेटर के साथ उन्हें संक्रमित करने के लिए लिंक करेंगे और खराब आवंटन म्यूट पर साफ-सफाई में विफल होने के अपने प्रयास प्रस्तुत करेंगे?
यदि आपके पास कोई जवाब है, तो क्या आप यह बता सकते हैं कि यह कैसे काम करता है, या मुझे इसे हल करने के लिए सही संदर्भ में इंगित करता है?
धन्यवाद! हम डीएलएल के रूप में मानक सी ++ रनटाइम से लिंक करते हैं, जिसका मतलब है कि सभी के लिए एमएफसी अपवाद। दुर्भाग्यवश, इस ऐप के प्रमुख लक्ष्यों में से एक वर्चुअल मेमोरी के बिना एक सिस्टम है, इसलिए आवंटन जांच की आवश्यकता है, ओह। –
यदि आप प्रतीकों के साथ संकलित करने में सक्षम हैं तो मैं ऑपरेटर को कॉल में कदम उठाने का सुझाव दूंगा और डीबगर को निश्चित रूप से साबित करना चाहिए कि कार्यान्वयन कहलाया जा रहा है। सुनिश्चित नहीं है कि यह आपके लक्षित प्लेटफार्म के लिए उपयोगी है .. – Henk
प्रतीक कोई समस्या नहीं है। शाखा को अपवाद फेंकने के लिए मजबूर करना, विशेष रूप से दिखाता है कि सीमेंरीएक्सप्शन * फेंक दिया जा रहा है। यह चीजों को एक स्पर्श को जटिल बनाता है, लेकिन यह जानना अच्छा होता है कि वास्तव में क्या चल रहा है। एक बार फिर धन्यवाद! –