यह कैसे है कि किसी प्रोग्राम में अभिव्यक्ति bad_alloc
त्रुटि फेंक सकती है, इसके बावजूद कोई #include <new>
नहीं है (क्योंकि यह त्रुटि is defined in the <new>
header) है?<new> हेडर को परिभाषित नहीं किए जाने के बावजूद bad_alloc फेंकता है?
3.7.4 से। N3337:
लाइब्रेरी वैश्विक आवंटन और विध्वंस कार्यों के लिए डिफ़ॉल्ट परिभाषा प्रदान करती है। कुछ वैश्विक आवंटन और विध्वंस कार्यों को बदलने योग्य (18.6.1) हैं। एक सी ++ कार्यक्रम एक प्रतिस्थापन आवंटन या deallocation समारोह की एक परिभाषा प्रदान करेगा। ऐसी कोई फ़ंक्शन परिभाषा लाइब्रेरी में प्रदान किए गए डिफ़ॉल्ट संस्करण को प्रतिस्थापित करती है (17.6.4.6)। निम्नलिखित आवंटन और विध्वंस कार्यों (18.6) को कार्यक्रम के प्रत्येक अनुवाद इकाई में वैश्विक दायरे में स्पष्ट रूप से घोषित किया जाता है।
void* operator new(std::size_t); void* operator new[](std::size_t); void operator delete(void*); void operator delete[](void*);
ये निहित घोषणाओं केवल फ़ंक्शन नाम
operator new
,operator new[]
,operator delete
, औरoperator delete[]
परिचय। [नोट: निहित घोषणाएंstd
,std::size_t
, या किसी भी अन्य नाम का नाम नहीं देती हैं जो लाइब्रेरी इन नामों को घोषित करने के लिए उपयोग करती है। इस प्रकार, एक नई अभिव्यक्ति, हटा-अभिव्यक्ति या फ़ंक्शन कॉल जो हेडर<new>
सहित बिना किसी फ़ंक्शन को संदर्भित करती है, अच्छी तरह से बनाई गई है। हालांकि,std
याstd::size_t
का जिक्र करना बीमार है जब तक उचित शीर्षक सहित नाम घोषित नहीं किया जाता है। अंत ध्यान दें] आवंटन और/या आवंटन रद्द कार्य भी घोषित किया जा सकता है और किसी भी वर्ग
इस के लिए परिभाषित अभी भी मेरे लिए स्पष्ट नहीं है। निहित घोषणापत्र std::size_t
का उपयोग करते हैं लेकिन उन्हें पेश नहीं करते हैं (और यह bad_alloc
के मामले में होना चाहिए)? और को new
अभिव्यक्ति से पहले पेश करने की आवश्यकता नहीं है? क्या यह समझ सकता है कि यह कैसा है, या क्या मुझे इसे अंकित मूल्य पर लेना है?
ठीक है, आप मानक सी ++ लाइब्रेरी से जुड़ रहे हैं, जिसमें '' शामिल है, और इसलिए 'std :: bad_alloc' के बारे में पता है। –
इस तथ्य के साथ कुछ करने के लिए कुछ हो सकता है कि एक सी ++ मानक शीर्षलेख आधिकारिक तौर पर किसी अन्य सी ++ मानक शीर्षलेख को शामिल करने की अनुमति है, लेकिन मुझे लगता है कि जहां तक इन कार्यों का संबंध है, पूरी कहानी नहीं है। –
कुछ प्रयोग करने के बाद, मैंने निष्कर्ष निकाला कि यह वास्तव में मामला है। मैं इसके बारे में एक जवाब लिखूंगा। –