मैं आमतौर पर दोनों के बीच अंतर करने के लिए चीजों को अलग-अलग शब्दों में बताने की कोशिश करता हूं, लेकिन यह किसी भी मामले में एक अच्छा सवाल है।
ऑपरेटर नया एक फ़ंक्शन है जो कच्ची मेमोरी को आवंटित करता है - कम से कम वैचारिक रूप से, यह बहुत अलग नहीं है malloc()। हालांकि यह काफी असामान्य है जब तक कि आप अपने कंटेनर की तरह कुछ नहीं लिख रहे हैं, आप ऑपरेटर को सीधे नए कह सकते हैं, जैसे:
char *x = static_cast<char *>(operator new(100));
यह भी संभव है कि विश्व स्तर पर या एक विशिष्ट वर्ग के लिए ऑपरेटर को अधिभारित किया जाए। IIRC, हस्ताक्षर है:
void *operator new(size_t);
बेशक, यदि आप एक ऑपरेटर नए (या तो वैश्विक या एक वर्ग के लिए) को अधिभारित करते हैं, तो आप मिलान ऑपरेटर को भी हटाने के लिए / चाहते हैं। जो इसके लायक है, उसके लिए एक अलग ऑपरेटर नया [] है जो सरणियों के लिए मेमोरी आवंटित करने के लिए उपयोग किया जाता है - लेकिन आप उस पूरी गड़बड़ को पूरी तरह से अनदेखा करने से लगभग निश्चित रूप से बेहतर हैं।
नया ऑपरेटर वह है जो आप सामान्य रूप से फ्री स्टोर से ऑब्जेक्ट बनाने के लिए उपयोग करते हैं:
my_class *x = new my_class(0);
दोनों के बीच अंतर यह है कि ऑपरेटर नया केवल कच्ची मेमोरी आवंटित करता है, और कुछ नहीं। नया ऑपरेटर मेमोरी को आवंटित करने के लिए ऑपरेटर नए का उपयोग करके शुरू करता है, लेकिन फिर यह निर्माता को सही प्रकार की वस्तु के लिए आमंत्रित करता है, इसलिए परिणाम उस मेमोरी में बनाई गई एक वास्तविक लाइव ऑब्जेक्ट है। यदि उस ऑब्जेक्ट में कोई अन्य ऑब्जेक्ट्स (या तो एम्बेडेड या बेस क्लासेस के रूप में) हैं, तो उन कंस्ट्रक्टर्स को भी इनवोक किया गया है।