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

सी ++ में विनाशकों के साथ खेलना

विनाशक c++ क्लास का एक फंक्शन है जो क्लास के ऑब्जेक्ट को डिलीट करने का काम करता है।

विनाशक को कॉल करना

विध्वंसक को तब कहा जाता है जब किसी वर्ग की वस्तु कार्यक्रम के दायरे से बाहर हो जाती है। मामले जब वस्तु दायरे से बाहर हो जाती है,

  • कार्यक्रम एक समारोह के दायरे से बाहर चला जाता है।

  • कार्यक्रम समाप्त होता है।

  • ऑब्जेक्ट के स्थानीय वैरिएबल को इनिशियलाइज़ करने वाला ब्लॉक दायरे से बाहर हो जाता है।

  • जब ऑब्जेक्ट का ऑपरेटर हटा दिया जाता है।

उदाहरण

आइए एक कोड देखें और प्रोग्राम के आउटपुट का अनुमान लगाएं,

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<"i = "<<valueInitializer()<<endl;
      return 0;
}

आउटपुट

i = 3

आइए पहले कोड को समझें, यहां हमने एक वैश्विक चर I बनाया है और फिर मूल्य आरंभिक फ़ंक्शन में हमने इसका मान बदल दिया है। यहां, हमने इसे मान 3 के साथ प्रारंभ किया है, फिर ऑब्जेक्ट d1 बनाया है और फिर मान वापस कर दिया है।

आउटपुट का अनुमान लगाएं?

यह 3 है, अगर आपने सही अनुमान लगाया तो आपके लिए ताली बजाएं और अगर आपको लगता है कि यह 10 है तो कोई चिंता नहीं है। अब, देखें कि यहां क्या हुआ,

जैसा कि ऊपर चर्चा की गई है विनाशक को बुलाया जाता है जब कॉलिंग फ़ंक्शन दायरे से बाहर हो जाता है। और दायरे से बाहर जाने से पहले फ़ंक्शन ने मान 3 वापस कर दिया है।

उदाहरण

एक बार फिर इस ब्लॉक के आउटपुट का अनुमान लगाने की कोशिश करें,

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int& valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<<"i = "<<valueInitializer()<<endl;
   return 0;
}

आउटपुट

यह एक समान दिखने वाला कोड है लेकिन यह एक है

प्रिंट :i =10 इसके बजाय।

क्यों?

यहां, हमने वैल्यू के बजाय वेरिएबल रेफरेंस लौटाया है। इसलिए, जब विनाशक को बुलाया जाता है तो यह मान को 10 में बदल देता है और जैसे ही संदर्भ पास होता है 10 मुद्रित होता है।


  1. सी ++ में उदाहरण के साथ अभिव्यक्ति वृक्ष

    एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री होता है जिसमें ट्री के प्रत्येक नोड में या तो एक ऑपरेटर या ऑपरेंड होता है। लीफ नोड्स पेड़ का एक संचालन . का प्रतिनिधित्व करता है . गैर-पत्ती नोड्स पेड़ का एक ऑपरेटर . का प्रतिनिधित्व करता है । उदाहरण: इंफिक्स एक्सप्रेशन प्राप्त करने के लिए जिस

  1. C++ में समान योग के साथ स्प्लिट ऐरे

    मान लीजिए कि हमारे पास n पूर्णांकों के साथ एक सरणी है, हमें यह पता लगाना है कि क्या ट्रिपल (i, j, k) हैं जो इन शर्तों का पालन करते हैं - 0

  1. C++ में 3n स्लाइस के साथ पिज़्ज़ा

    मान लीजिए कि एक पिज्जा है जिसमें अलग-अलग आकार के 3n स्लाइस हैं, मैं और मेरे दो दोस्त पिज्जा के स्लाइस इस प्रकार लेंगे - मैं कोई भी पिज़्ज़ा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरी पसंद की घड़ी की विपरीत दिशा में अगला टुकड़ा उठाएगा। मेरा दोस्त बिमल मेरी पसंद की अगली स्लाइस को दक्षिणावर्त दिशा मे