एह, मुझे लगता है कि new
और malloc
अलग हैं और allocator
विभिन्न कार्य प्रदान करता है। malloc
गैर प्रारंभिक डेटा देता है, और calloc
शून्य -ed डेटा देता है। लेकिन new
कन्स्ट्रक्टर को कॉल करेगा यदि आप कुछ वर्ग का उदाहरण बना रहे हैं (int
, bool
इन आदिम प्रकार, जो, वैसे भी, प्रारंभ में भी शुरू किया जा सकता है)। delete
विनाशक को कॉल करेगा, जबकि free
नहीं है।
allocator
के लिए, यह उपयोगकर्ता के लिए अमूर्तता की एक परत प्रदान करता है। allocator
निर्मित ऑब्जेक्ट, गैर-प्रारंभिक मेमोरी स्पेस, या ऑब्जेक्ट को नष्ट कर सकता है या स्पेस को रिहा कर सकता है। स्मृति स्थान प्राप्त करने और ऑब्जेक्ट बनाने के लिए एसटीएल कंटेनर allocator
का उपयोग करते हैं।
लेकिन ध्यान दें कि कस्टम allocator
के रूप में संभव है, एक allocator
जरूरी स्मृति new
/delete
तरह का प्रबंधन नहीं है। यह स्मृति का एक बड़ा हिस्सा बना सकता है तो कुछ आवंटन कैश करें। यह डिस्क पर फ़ाइलों पर मैप किए गए क्षेत्रों में मेमोरी एड्रेस लौटा सकता है ताकि आंतरिक डेटा फाइल सिस्टम में जा सके क्योंकि यह ऊपरी परत, कंटेनर द्वारा संशोधित है। स्मृति प्राप्त करने के लिए यह new
पर भी कॉल कर सकता है। इस तरह, allocator
उपयोगकर्ता को कंटेनरों का निर्माण करने में सक्षम बनाता है जो स्मृति के विशिष्ट क्षेत्रों में स्थित हैं। तो, allocator
एस के साथ, कंटेनरों का आंतरिक तर्क स्मृति संग्रहण प्रबंधित करने के तरीके से अलग किया जाता है।
दरअसल आप ऊपर उल्लिखित प्रत्येक सुविधा को लागू करने के लिए std::allocator
से प्राप्त कक्षा लिख सकते हैं।
आप allocator
रों पर एक अधिक विस्तृत चर्चा के लिए this भी पढ़ सकते हैं।
1 google search: http://wiki.answers.com/Q/What_is_the_difference_between_malloc_and_new_other_than_syntax –
फ्लोरिस वेलेमैन, मैं नए और हटाए जाने के बीच अंतर की तलाश नहीं कर रहा था। – BJC
हम्म। मैं नहीं देखता कि "डुप्लिकेट" इस विशिष्ट प्रश्न का उत्तर कैसे देता है। खैर, शायद आंशिक रूप से ("आवंटक प्लग करने योग्य हैं") लेकिन यह आवंटन और निर्माण के बीच अंतर के बारे में विशिष्ट प्रश्न को संबोधित नहीं करता है। मुझे डाउनवोट के कारण का भी यकीन नहीं है। –