C ++ मेमोरी मैनेजमेंट: नया और डिलीट

इस ट्यूटोरियल में, हम C ++ में प्रभावी ढंग से मेमोरी का प्रबंधन करना सीखेंगे और उदाहरणों की मदद से नए और डिलीट ऑपरेशंस का उपयोग करेंगे।

C ++ हमें रन समय में एक चर या एक सरणी की स्मृति आवंटित करने की अनुमति देता है। इसे डायनेमिक मेमोरी एलोकेशन के रूप में जाना जाता है।

जावा और पायथन जैसी अन्य प्रोग्रामिंग भाषाओं में, संकलक स्वचालित रूप से चर के लिए आवंटित यादों का प्रबंधन करता है। लेकिन C ++ में ऐसा नहीं है।

C ++ में, हमें वैरिएबल के लिए कोई उपयोग नहीं होने के बाद मैन्युअल रूप से आवंटित मेमोरी को मैन्युअल रूप से आवंटित करने की आवश्यकता है।

हम क्रमशः newऔर deleteऑपरेटरों का उपयोग करके गतिशील रूप से मेमोरी को आवंटित और फिर से डील कर सकते हैं।

सी ++ नया ऑपरेटर

newऑपरेटर एक चर करने के लिए स्मृति आवंटित करता है। उदाहरण के लिए,

 // declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;

यहां, हमने ऑपरेटर intका उपयोग करके एक चर के लिए गतिशील रूप से मेमोरी आवंटित की newहै।

ध्यान दें कि हमने पॉइंटर पॉइंट वीवर का उपयोग मेमोरी को गतिशील रूप से आवंटित करने के लिए किया है। ऐसा इसलिए है क्योंकि newऑपरेटर स्मृति स्थान का पता देता है।

किसी सरणी के मामले में, newऑपरेटर सरणी के पहले तत्व का पता देता है।

ऊपर दिए गए उदाहरण से, हम देख सकते हैं कि newऑपरेटर का उपयोग करने के लिए सिंटैक्स है

 pointerVariable = new dataType;

ऑपरेटर को हटा दें

एक बार जब हमें एक चर का उपयोग करने की आवश्यकता नहीं होती है जिसे हमने गतिशील रूप से घोषित किया है, तो हम चर द्वारा कब्जा की गई मेमोरी को हटा सकते हैं।

इसके लिए, deleteऑपरेटर का उपयोग किया जाता है। यह मेमोरी को ऑपरेटिंग सिस्टम में लौटाता है। इसे मेमोरी डीलोकेशन के रूप में जाना जाता है

इस ऑपरेटर के लिए सिंटैक्स है

 delete pointerVariable;

कोड पर विचार करें:

 // declare an int pointer int* pointVar; // dynamically allocate memory // for an int variable pointVar = new int; // assign value to the variable memory *pointVar = 45; // print the value stored in memory cout << *pointVar; // Output: 45 // deallocate the memory delete pointVar;

यहां, हमने intपॉइंटर पॉइन्वार का उपयोग करके एक चर के लिए गतिशील रूप से आवंटित की गई मेमोरी है ।

पॉइंट वीयर की सामग्री को प्रिंट करने के बाद, हमने मेमोरी का उपयोग करते हुए डील-डौल किया delete

नोट : यदि प्रोग्राम बड़ी मात्रा में अवांछित मेमोरी का उपयोग करता है new, तो सिस्टम क्रैश हो सकता है क्योंकि ऑपरेटिंग सिस्टम के लिए कोई मेमोरी उपलब्ध नहीं होगी। इस स्थिति में, deleteऑपरेटर क्रैश से सिस्टम की मदद कर सकता है।

उदाहरण 1: C ++ डायनेमिक मेमोरी आवंटन

 #include using namespace std; int main() ( // declare an int pointer int* pointInt; // declare a float pointer float* pointFloat; // dynamically allocate memory pointInt = new int; pointFloat = new float; // assigning value to the memory *pointInt = 45; *pointFloat = 45.45f; cout << *pointInt << endl; cout << *pointFloat << endl; // deallocate the memory delete pointInt, pointFloat; return 0; )

आउटपुट

 45 45.45

इस कार्यक्रम में, हमने गतिशील रूप से दो प्रकारों intऔर floatप्रकारों के लिए मेमोरी आवंटित की है । उन्हें मान असाइन करने और उन्हें प्रिंट करने के बाद, हम अंत में कोड का उपयोग करके यादों को निपटाते हैं

 delete pointInt, pointFloat;

नोट: डायनामिक मेमोरी एलोकेशन मेमोरी मैनेजमेंट को अधिक कुशल बना सकता है।

विशेष रूप से सरणियों के लिए, जहां बहुत बार हम सरणी के आकार को रन टाइम तक नहीं जानते हैं।

उदाहरण 2: C ++ नया और एरर के लिए ऑपरेटर हटाएं

 // C++ Program to store GPA of n number of students and display it // where n is the number of students entered by the user #include #include using namespace std; int main() ( int num; cout <> num; float* ptr; // memory allocation of num number of floats ptr = new float(num); cout << "Enter GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 <> *(ptr + i); ) cout << "Displaying GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 << " :" << *(ptr + i) << endl; ) // ptr memory is released delete () ptr; return 0; )

आउटपुट

छात्रों की कुल संख्या दर्ज करें: 4 छात्रों का GPA दर्ज करें। छात्र 1: 3.6 छात्र 2: 3.1 छात्र 3: 3.9 छात्र 4: 2.9 छात्रों का जीपीए प्रदर्शित करना। छात्र 1: 3.6 छात्र 2: 3.1 छात्र 3: 3.9 छात्र 4: 2.9

इस कार्यक्रम में, हमने उपयोगकर्ता को छात्रों की संख्या दर्ज करने और इसे अंक चर में संग्रहीत करने के लिए कहा है।

फिर, हमने floatनए का उपयोग करके सरणी के लिए गतिशील रूप से मेमोरी आवंटित की है ।

हम सूचक संकेतन का उपयोग करके सरणी में डेटा दर्ज करते हैं (और बाद में उन्हें प्रिंट करते हैं)।

अब हमें सरणी की आवश्यकता नहीं है, हम कोड का उपयोग करके सरणी मेमोरी को हटा देते हैं delete () ptr;

उपयोग के ()बाद सूचना दें delete। हम वर्गाकार कोष्ठक का उपयोग यह ()दर्शाने के लिए करते हैं कि मेमोरी डीलक्लेवेशन एक सरणी है।

उदाहरण 3: C ++ नया और ऑब्जेक्ट के लिए ऑपरेटर हटाएं

 #include using namespace std; class Student ( int age; public: // constructor initializes age to 12 Student() : age(12) () void getAge() ( cout << "Age = " << age 

Output

 Age = 12

In this program, we have created a Student class that has a private variable age.

We have initialized age to 12 in the default constructor Student() and print its value with the function getAge().

In main(), we have created a Student object using the new operator and use the pointer ptr to point to its address.

The moment the object is created, the Student() constructor initializes age to 12.

We then call the getAge() function using the code:

 ptr->getAge();

Notice the arrow operator ->. This operator is used to access class members using pointers.

दिलचस्प लेख...