C++ में जब हम एक नया ऑब्जेक्ट बनाना चाहते हैं, तो हमें मेमोरी में एक मेमोरी ब्लॉक बनाना होगा, फिर उस मेमोरी ब्लॉक को आरंभ करने के लिए कंस्ट्रक्टर को भी कॉल करना होगा। हम new कीवर्ड का उपयोग करके मेमोरी एलिमेंट बना सकते हैं। यह new ऑपरेटर दो लगातार कार्य करता है। लेकिन operator new केवल मेमोरी स्पेस बनाता है।
New कीवर्ड
new ऑपरेटर एक विशेष प्रकार का ऑपरेटर है, जो हीप सेक्शन पर मेमोरी आवंटन के लिए अनुरोध को दर्शाता है। जब पर्याप्त मेमोरी उपलब्ध होती है, तो new ऑपरेटर पॉइंटर वेरिएबल को मेमोरी आरंभ करता है। जब हम सामान्य new कीवर्ड का उपयोग करके ऑब्जेक्ट बनाते हैं तो यह दो लगातार कार्य करता है
- ? हीप सेक्शन में ऑब्जेक्ट के लिए मेमोरी ब्लॉक आवंटित करें
- ? मेमोरी ब्लॉक को आरंभ करने के लिए कंस्ट्रक्टर को कॉल करें।
उदाहरण कोड
#include <iostream> using namespace std; class Box { public: Box() { cout << "कंस्ट्रक्टर कहा गया!" <<endl; } }; int main() { Box* myBox = new Box; }
आउटपुट
कंस्ट्रक्टर कहा गया!
Operator New
operator new एक फंक्शन है। इस फंक्शन का उपयोग new ऑपरेटर को ओवरलोड करने के लिए किया जाता है। इसका उपयोग करके हम कच्चे मेमोरी ब्लॉक आवंटित कर सकते हैं। यह अवधारणात्मक रूप से malloc() या calloc() फंक्शन के समान है। यह फंक्शन कंस्ट्रक्टर को कॉल नहीं करता इसलिए मेमोरी आरंभ नहीं होती। हालांकि इस ओवरलोडेड मेथड से पॉइंटर वापस आने के बाद, कंपाइलर उसके बाद कंस्ट्रक्टर को कॉल करता है।
उदाहरण कोड
#include <iostream> #include <cstdlib> using namespace std; class Box { public: Box() { cout << "कंस्ट्रक्टर कहा गया!" <<endl; } void *operator new(size_t size) { cout << "Operator New कॉल करें"<<endl; void *p = malloc(size); return p; } }; int main() { Box* myBox = new Box; }
आउटपुट
Operator New कॉल करें कंस्ट्रक्टर कहा गया!