तो मैं अपने विकास के साथ क्यूटी का बहुत उपयोग करता हूं और इसे प्यार करता हूं। क्यूटी वस्तुओं के साथ सामान्य डिजाइन पैटर्न उन्हें new
का उपयोग करके आवंटित करना है।पकड़ने के साथ नीति std :: bad_alloc
बहुत सारे उदाहरण (विशेष रूप से क्यूटी डिजाइनर द्वारा उत्पन्न कोड) std::bad_alloc
अपवाद के लिए पूरी तरह से जांच नहीं करते हैं। चूंकि ऑब्जेक्ट आवंटित (आमतौर पर विजेट और ऐसे) छोटे होते हैं, यह शायद ही कभी एक समस्या है। आखिरकार, यदि आप 20 बाइट्स जैसे कुछ आवंटित करने में विफल रहते हैं, तो हालात समस्या का समाधान करने के लिए आप इतना कुछ नहीं कर सकते हैं।
वर्तमान में, मैंने कोशिश की/पकड़ में आवंटन "बड़े" (पृष्ठ या दो आकार से ऊपर कुछ भी) लपेटने की नीति अपनाई है। यदि यह विफल रहता है, तो मैं उपयोगकर्ता को एक संदेश प्रदर्शित करता हूं, जो कुछ भी छोटा है, मैं सिर्फ std::bad_alloc
अपवाद के साथ ऐप को क्रैश कर दूंगा।
तो, मुझे आश्चर्य है कि इस पर विचारों के स्कूल इस पर क्या हैं?
क्या प्रत्येक new
ऑपरेशन की जांच करना अच्छी नीति है? या केवल मुझे उम्मीद है कि असफल होने की संभावना है?
साथ ही, एम्बेडेड वातावरण से निपटने के दौरान यह स्पष्ट रूप से एक पूरी कहानी है जहां संसाधनों को और अधिक बाध्य किया जा सकता है। मैं डेस्कटॉप एप्लिकेशन के संदर्भ में पूछ रहा हूं, लेकिन अन्य परिदृश्यों के उत्तर में भी दिलचस्पी होगी।
वास्तव में नया नया विकल्प एक व्यवहार्य विकल्प नहीं है, लेकिन यदि कोड के किसी दिए गए ब्लॉक में कुछ आवंटन हैं, तो यह कोशिश/पकड़ ब्लॉक का उपयोग करने से कहीं अधिक वर्बोज़ होगा। मैं 100% से सहमत हूं कि "क्या करना है" असली सवाल है, क्योंकि स्मृति परिदृश्य से वास्तव में सीमित है कि आप चीजों को ठीक करने के लिए कितना कर सकते हैं। –
इतना नहीं "क्या करना है", लेकिन "क्या आप कुछ भी कर सकते हैं" – jalf
यदि आप इसे काफी अधिक पकड़ते हैं, तो कुछ स्मृति को अवांछित ढेर के दौरान मुक्त किया जा सकता है। आप यह सुनिश्चित कर सकते हैं कि किसी नए_हैंडर या ट्रिक्स जैसे 'int flag = false; कोशिश करें {वेक्टर वी (1000); ध्वज = सत्य; doEventLoop(); } पकड़ो (bad_alloc) {अगर (ध्वज) cout << "मेरे पास उपयोगकर्ता को संकेत देने के लिए उपयोग करने के लिए 4k है \ n"; } ' –