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

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

C++ में RAII

RAII (Resource Acquisition Is Initialization) C++ तकनीक है जो संसाधन के जीवन चक्र को नियंत्रित करती है। यह एक क्लास वेरिएंट है और ऑब्जेक्ट जीवनकाल से जुड़ा हुआ है।

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

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

उदाहरण

void file_write {
    static mutex m; // फाइल एक्सेस की सुरक्षा के लिए म्यूटेक्स
    lock_guard<mutex> lock(m); // फाइल एक्सेस करने से पहले म्यूटेक्स लॉक करें
    ofstream file("a.txt");
    if (!file.is_open()) // यदि फाइल खुली नहीं है
        throw runtime_error("unable to open file");
    // फाइल में टेक्स्ट लिखें
    file << text << endl;
}

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

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

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

उदाहरण

#include <iostream>
using namespace std;

// एक जेनेरिक स्मार्ट पॉइंटर क्लास टेम्पलेट
template <class T>
class Smartpointer {
    T *p; // वास्तविक पॉइंटर
public:
    // कंस्ट्रक्टर
    Smartpointer(T *ptr = NULL) {
        p = ptr;
    }
    // डिस्ट्रक्टर
    ~Smartpointer() {
        delete(p);
    }
    // डी-रेफरेंसिंग ऑपरेटर ओवरलोडिंग
    T & operator * () {
        return *p;
    }
    // एरो ऑपरेटर ओवरलोडिंग ताकि T के मेंबर्स को पॉइंटर की तरह एक्सेस किया जा सके
    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# और C++ के बारे में जानें - C# एक सामान्य-उद्देश्य ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है। इसे एक शुद्ध ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा माना जाता है। इसे C शार्प के रूप में उच्चारित किया जाता है। इसे माइक्रोसॉफ्ट में एंडर्स हेजल्सबर्ग और उनकी टीम द्वारा विकसित किया गया था। मेमोरी प्र

  1. - C++ का उपयोग करके 0, 1 और 2 की सरणी को सॉर्ट करें

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

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

    फ़ाइल ग्लोबिंग जिसे पथ नाम विस्तार भी कहा जाता है। यह लिनक्स में वाइल्डकार्ड पैटर्न को पहचानने और फिर इन पैटर्न के आधार पर फ़ाइल पथ विस्तार खोजने की विधि है। वाइल्डकार्ड पैटर्न वे स्ट्रिंग्स हैं जिनका उपयोग पैटर्न के आधार पर कई फ़ाइलों के चयन के लिए किया जाता है। ? , [] , * जैसे वर्ण पैटर्न का उपयो