2009-12-25 11 views
10

This MSDN page उल्लेख करता है कि new और delete के संस्करण नहीं हैं। nothrow new काफी ज्ञात चीज है - स्मृति आवंटन विफल होने पर अपवाद फेंकने के बजाय शून्य वापस आती है। लेकिन nothrow delete क्या है?सी ++ में नोट्रो हटाएं क्या है?

उत्तर

18

वे शायद कच्चे मेमोरी आवंटन कार्यों operator new और operator delete का जिक्र कर रहे हैं।

जब आप किसी विशेष स्थान नई अभिव्यक्ति के संस्करण आह्वान, और स्मृति आवंटन समारोह operator new सफल होता है, लेकिन इस प्रक्रिया में विफल रहता है (अतिरिक्त पैरामीटर के साथ यानी नई अभिव्यक्ति वे सभी सरकारी तौर पर नियुक्ति new की रूपों के रूप में भेजा जाता है) बाद में किसी अन्य कारण (कन्स्ट्रक्टर फेंकता है) के लिए, कार्यान्वयन को प्रक्रिया को निरस्त करना होगा और operator delete के उपयुक्त संस्करण को कॉल करके आवंटित स्मृति को स्वचालित रूप से रिलीज़ करना होगा। इस मामले में operator delete का "उपयुक्त संस्करण" संस्करण है जिसमें पैरामीटर का एक ही सेट है operator new फ़ंक्शन पहले स्मृति आवंटन के लिए उपयोग किया गया था (बिल्कुल पहले पैरामीटर को छोड़कर)।

यह nothrowoperator new के संस्करण पर भी लागू होता है। जब आप nothrow नई अभिव्यक्ति के रूप का उपयोग करते हैं, तो यह nothrowoperator new का संस्करण कॉल करता है और फिर ऑब्जेक्ट आवंटित स्मृति में बनाता है। यदि कन्स्ट्रक्टर विफल रहता है (फेंकता है), नई अभिव्यक्ति के कार्यान्वयन operator delete के संस्करण की सहायता से आवंटित स्मृति को रिलीज़ करता है। operator delete के इस संस्करण के लिए यह मूल रूप से एकमात्र कारण है।

दूसरे शब्दों में, nothrowoperator delete का संस्करण बहुत विशिष्ट आंतरिक उद्देश्यों के लिए मौजूद है। आपको सामान्य रूप से इसे स्वयं नहीं कहना चाहिए और शायद, आपको वास्तव में इसके अस्तित्व के बारे में जानने की आवश्यकता नहीं है। हालांकि, यह जानने योग्य है कि ऊपर वर्णित कारणों के लिए, जब भी आप अतिरिक्त पैरामीटर के साथ operator new का अपना संस्करण बनाते हैं, तो अतिरिक्त पैरामीटर के उसी सेट के साथ operator delete का मिलान संस्करण प्रदान करना हमेशा अच्छा विचार है।

संबंधित मुद्दे