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

C++ में RAII और स्मार्ट पॉइंटर्स

RAII C++ में

RAII (रिसोर्स एक्विजिशन इज इनिशियलाइज़ेशन) C++ तकनीक है जो संसाधन के जीवन चक्र को नियंत्रित करती है। यह एक वर्ग प्रकार है और जीवन काल पर आपत्ति करने के लिए बंधा हुआ है।

यह कई संसाधनों को कक्षा में समाहित करता है जहां वस्तु निर्माण के दौरान निर्माणकर्ता द्वारा संसाधन आवंटन किया जाता है और वस्तु विनाश के दौरान विनाशक द्वारा संसाधन विलोपन किया जाता है।

वस्तु के जीवित रहने तक संसाधन को धारण करने की गारंटी है।

उदाहरण

void file_write {
   Static mutex m; //mutex to protect file access
   lock_guard<mutex> lock(m); //lock mutex before accessing file
   ofstream file("a.txt");
   if (!file.is_open()) //if file is not open
   throw runtime_error("unable to open file");
   // write text to file
   file << text << stdendl;
}

C++ और माइनस में स्मार्ट पॉइंटर्स;

स्मार्ट पॉइंटर एक अमूर्त डेटा प्रकार है जिसके उपयोग से हम एक सामान्य पॉइंटर इस तरह से बना सकते हैं कि इसे मेमोरी मैनेजमेंट जैसे फाइल हैंडलिंग, नेटवर्क सॉकेट आदि के रूप में इस्तेमाल किया जा सकता है, साथ ही यह स्वचालित विनाश, संदर्भ गणना आदि जैसे कई काम कर सकता है।

सी ++ में स्मार्ट पॉइंटर, टेम्पलेट क्लास के रूप में कार्यान्वित किया जा सकता है, जो * और -> ऑपरेटर के साथ अतिभारित है। auto_ptr, shared_ptr, unique_ptr और कमजोर_ptr स्मार्ट पॉइंटर के रूप हैं जिन्हें C++ लाइब्रेरी द्वारा कार्यान्वित किया जा सकता है।

उदाहरण

#include <iostream>
using namespace std;
// A generic smart pointer class
template <class T>
class Smartpointer {
   T *p; // Actual pointer
   public:
      // Constructor
      Smartpointer(T *ptr = NULL) {
         p = ptr;
      }
   // Destructor
   ~Smartpointer() {
      delete(p);
   }
   // Overloading de-referencing operator
   T & operator * () {
      return *p;
   }
   // Over loading arrow operator so that members of T can be accessed
   // like a pointer
   T * operator -> () {
      return p;
   }
};
int main() {
   Smartpointer<int> p(new int());
   *p = 26;
   cout << "Value is: "<<*p;
   return 0;
}

आउटपुट

Value is: 26

  1. सी # और सी ++ के बीच का अंतर

    आइए सबसे पहले C# और C++ के बारे में जानें - C# एक सामान्य उद्देश्य वाली वस्तु-उन्मुख प्रोग्रामिंग भाषा है। इसे शुद्ध वस्तु-उन्मुख प्रोग्रामिंग भाषा माना जाता है। इसका उच्चारण सी शार्प के रूप में किया जाता है। इसे एंडर्स हेजल्सबर्ग और माइक्रोसॉफ्ट में उनकी टीम द्वारा विकसित किया गया था। मेमोरी प्रबं

  1. C++ . का उपयोग करके 0, 1 और 2 के सरणियों को क्रमबद्ध करें

    0, 1, और 2 की एक सरणी को देखते हुए, तत्वों को इस क्रम में क्रमबद्ध करें कि सभी शून्य पहले 1 से पहले और सभी 2 अंत में आएं। हमें सरणी के सभी तत्वों को जगह में क्रमबद्ध करना होगा। हम डीएनएफ (डच राष्ट्रीय ध्वज) सॉर्टिंग एल्गोरिदम का उपयोग करके इस समस्या को हल कर सकते हैं। उदाहरण के लिए, इनपुट-1 - arr[

  1. C++ में Linux में फ़ाइल ग्लोबिंग

    फ़ाइल ग्लोबिंग को पथ नाम विस्तार के रूप में भी जाना जाता है। यह वाइल्डकार्ड . को पहचानने की विधि है linux में पैटर्न और फिर इन पैटर्न के आधार पर फ़ाइल पथ विस्तार का पता लगाना। वाइल्डकार्ड पैटर्न स्ट्रिंग्स हैं जो पैटर्न के आधार पर कई फाइलों के चयन के लिए उपयोग की जाती हैं। चरित्र पैटर्न जैसे