Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

यदि कोई वस्तु C++ में किसी ब्लॉक के अंदर बनाई जाती है तो उसे कहाँ संग्रहीत किया जाता है?


इस खंड में हम चर्चा करेंगे कि C++ प्रोग्राम को संकलित करते समय वेरिएबल और ऑब्जेक्ट मेमोरी में कहाँ स्टोर किए जाते हैं। जैसा कि हम जानते हैं, मेमोरी के दो भाग होते हैं जिनमें किसी ऑब्जेक्ट को स्टोर किया जा सकता है -

  • ढेर - सभी सदस्य जिन्हें मेमोरी के ब्लॉक के अंदर घोषित किया जाता है, यह स्टैक सेक्शन के अंदर स्टोर होता है। मुख्य फ़ंक्शन भी एक फ़ंक्शन है, इसलिए इसके अंदर के तत्वों को स्टैक के अंदर संग्रहीत किया जाएगा।

  • ढेर - जब कुछ वस्तुओं को गतिशील रूप से आवंटित किया जाता है, तो वह हीप सेक्शन के अंदर जमा हो जाती है।

किसी ब्लॉक या फ़ंक्शन के अंदर घोषित ऑब्जेक्ट का दायरा उस ब्लॉक तक सीमित होता है जिसमें इसे बनाया जाता है। ऑब्जेक्ट को ब्लॉक के अंदर बनाए जाने पर स्टैक में संग्रहीत किया जाएगा और जब नियंत्रण ब्लॉक या फ़ंक्शन से बाहर निकलता है तो ऑब्जेक्ट को हटा दिया जाता है या नष्ट कर दिया जाता है।

गतिशील रूप से आवंटित वस्तुओं (रनटाइम के दौरान) के मामले में वस्तु को ढेर पर संग्रहीत किया जाएगा। यह नए ऑपरेटर की मदद से किया जाता है। उस वस्तु को नष्ट करने के लिए, हमें स्पष्ट रूप से नष्ट करने के लिए डेल कीवर्ड का उपयोग करना होगा।

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <iostream>
using namespace std;
class Box {
   int width;
   int length;
public:
   Box(int length = 0, int width = 0) {
      this->length = length;
      this->width = width;
   }
   ~Box() {
      cout << "Box is destroying" << endl;
   }
   int get_len() {
      return length;
   }
   int get_width() {
      return width;
   }
};
int main() {
   {
      Box b(2, 3); // b will be stored in the stack
      cout << "Box dimension is:" << endl;
      cout << "Length : " << b.get_len() << endl;
      cout << "Width :" << b.get_width() << endl;
   }
   cout << "\tExitting block, destructor" << endl;
   cout << "\tAutomatically call for the object stored in stack." << endl;
   Box* box_ptr;{
      //Object will be placed in the heap section, and local
      pointer variable will be stored inside stack
      Box* box_ptr1 = new Box(5, 6);
      box_ptr = box_ptr1;
      cout << "---------------------------------------------------" << endl;
      cout << "Box 2 dimension is:" << endl;
      cout << "length : " << box_ptr1->get_len() << endl;
      cout << "width :" << box_ptr1->get_width() << endl;
      delete box_ptr1;
   }
   cout << "length of box2 : " << box_ptr->get_len() << endl;
   cout << "width of box2 :" << box_ptr->get_width() << endl;
}

आउटपुट

Box dimension is:
Length : 2
Width :3
Box is destroying
      Exitting block, destructor
      Automatically call for the object stored in stack.
---------------------------------------------------
Box 2 dimension is:
length : 5
width :6
Box is destroying
length of box2 : 0
width of box2 :0

  1. बहु-आयामी सरणियों का उपयोग करके दो मैट्रिक्स जोड़ने के लिए C++ प्रोग्राम

    मैट्रिक्स संख्याओं का एक आयताकार सरणी है जिसे पंक्तियों और स्तंभों के रूप में व्यवस्थित किया जाता है। मैट्रिक्स का एक उदाहरण इस प्रकार है। एक 4*3 मैट्रिक्स में 4 पंक्तियाँ और 3 कॉलम होते हैं जैसा कि नीचे दिखाया गया है - 3 5 1 7 1 9 3 9 4 1 6 7 एक प्रोग्राम जो बहुआयामी सरणियों का उपयोग करके दो मैट

  1. C++ मानक आउटपुट स्ट्रीम (cout) क्या है?

    std::cout क्लास ओस्ट्रीम का एक ऑब्जेक्ट है जो संकीर्ण वर्णों (चार प्रकार के) के लिए उन्मुख मानक आउटपुट स्ट्रीम का प्रतिनिधित्व करता है। यह सी स्ट्रीम स्टडआउट से मेल खाती है। मानक आउटपुट स्ट्रीम परिवेश द्वारा निर्धारित वर्णों का डिफ़ॉल्ट गंतव्य है। यह गंतव्य अधिक मानक वस्तुओं (जैसे कि सेर या क्लॉग) क

  1. सी ++ में पायथन ऑब्जेक्ट का उपयोग कैसे करें?

    यहां एक उदाहरण दिया गया है जिसमें एक साधारण पायथन ऑब्जेक्ट लपेटा और एम्बेड किया गया है। हम इसके लिए .c का उपयोग कर रहे हैं, c++ के समान चरण हैं - class PyClass(object):     def __init__(self):         self.data = []     def add(self, val):