2012-05-04 11 views
6

क्या नया ऑपरेटर हीप मेमोरी के निरंतर हिस्से को आवंटित करने की गारंटी देता है? अर्थात।सी ++ नया ऑपरेटर - मेमोरी लेआउट

objects=(Base*)malloc(1024*sizeof(base)); 

या वहाँ अंतराल हो सकता है के रूप में ही स्मृति आवंटन के मामले में

objects=new Base[1024]; 

है?

उत्तर

8

हां, स्मृति निरंतर रहेगी। आवंटन के मामले में, यह malloc संस्करण जैसा ही है, लेकिन कई अंतर हैं (कन्स्ट्रक्टर को कॉल, newNULL वापस नहीं लौटाता है, malloc अपवाद नहीं फेंकता है, आदि।)।

ध्यान दें कि आप delete या free साथ new[] अप मिश्रण नहीं कर सकते, तो आप स्मृति को मुक्त करने के delete[] objects उपयोग करना होगा।

+0

यह बिल्कुल समान नहीं है। 'नया []' संस्करण प्रत्येक ऑब्जेक्ट पर डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल करेगा। –

+1

@ edA-qamort-ora-y मैंने यही कहा ... –

+0

क्षमा करें, मैं आज अंधेरा हूं मुझे लगता है। हालांकि नया संस्करण सरणी के आकार को याद रखने के लिए थोड़ा और स्थान आवंटित करेगा, इसलिए 'हटाएं []' विनाशकों की सही संख्या को कॉल कर सकता है। यह निश्चित रूप से अंतरिक्ष में एक मामूली अंतर है। –

3

शायद। new ऑपरेटर दो चीजें करता है: यह operator new फ़ंक्शन को कॉल करता है, जो स्मृति के एक संगत ब्लॉक को वापस कर देगा, जो सभी संभावित प्रकारों के लिए पर्याप्त रूप से गठबंधन होगा (सिवाय इसके कि जब यह नहीं होता है, उदाहरण के लिए एक दुरुपयोग प्लेसमेंट नया); फिर यह वस्तु के निर्माता को बुलाता है, जो कुछ भी कर सकता है। अतिरिक्त ब्लॉक आवंटित करने सहित, जो पहले के साथ संगत नहीं होगा।

0

यदि new ऑपरेटर अधिभारित नहीं है, तो स्मृति का आवंटित ब्लॉक संगत है। लेकिन अगर यह अधिभारित है, तो हम नहीं जानते (कुछ बुरा प्रोग्रामर इसे अधिभारित कर सकते हैं?: डी)

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