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