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