what is smart pointers in C++ in Hindi- C++ tutorial In Hindi - Computer in Hindi | Business in Hindi

Friday, December 17, 2021

what is smart pointers in C++ in Hindi- C++ tutorial In Hindi

 एक पॉइंटर का उपयोग दूसरे वेरिएबल के एड्रेस को स्टोर करने के लिए किया जाता है। दूसरे शब्दों में, एक पॉइंटर प्रोग्राम (हीप मेमोरी) के बाहर एक संसाधन की जानकारी निकालता है।


हम संसाधन की एक प्रति का उपयोग करते हैं, और परिवर्तन करने के लिए, यह कॉपी किए गए संस्करण में किया जाता है। मूल संसाधन की सामग्री को बदलने के लिए, smart pointers का उपयोग किया जाता है।


Problems faced with normal pointers in C++ In Hindi

नीचे एक उदाहरण दिया गया है जो normal pointers के साथ समस्या को दर्शाता है।


दो डेटा सदस्यों (लंबाई और चौड़ाई) के साथ एक वर्ग आयत बनाया। एक फ़ंक्शन fun() गतिशील रूप से आयत का एक ऑब्जेक्ट बनाता है।


जब फ़ंक्शन fun() समाप्त होता है, तो ऑब्जेक्ट p नष्ट हो जाता है। चूंकि हमने p को नहीं हटाया है, मेमोरी आवंटित रहती है, और यह आवंटित संसाधन अन्य चर के लिए उपलब्ध नहीं होगा।


main () में, हम एक अनंत लूप निष्पादित करते हैं जो p ऑब्जेक्ट बनाते रहेंगे और संसाधन आवंटित करेंगे। यह समस्या memory leak में बदल जाती है जिसका समाधान स्मार्ट पॉइंटर्स है।

  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. class Rectangle { // created a class Rectangle  
  5. private:  
  6.     int length; // data member as length of rectangle  
  7.     int breadth; // data member as breadth of rectangle  
  8.   
  9. };  
  10.   
  11. void fun() // the function to indicate the problem with normal pointer   
  12. {  
  13.       
  14.     Rectangle* p = new Rectangle(); // Create a dynamic object p   
  15. }  
  16.   
  17. int main()  
  18. {  
  19.     // Infinite Loop  
  20.     while (1) { // Run an infinite loop that will allocate p   
  21.         fun();  
  22.     }  
  23. }  


Smart pointers in C++ 

हम स्मार्ट पॉइंटर्स को इस तरह लागू करेंगे कि वे अप्रयुक्त संसाधनों की मेमोरी को छोड़ दें।


एक पॉइंटर, ओवरलोडेड ऑपरेटर्स (->, *) और डिस्ट्रक्टर्स के साथ एक क्लास बनाएं।


जब इसकी वस्तु दायरे से बाहर हो जाती है, तो विनाशक को स्वचालित रूप से बुलाया जाएगा, और स्वचालित रूप से गतिशील रूप से आवंटित स्मृति हटा दी जाएगी।


Example For Smart pointers in C++ 


  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. class SmartPtr { // Create the class to implement smart Pointer  
  5.     int* ptr; // Actual pointer  
  6. public:  
  7. // Create an explicit constructor   
  8.     explicit SmartPtr(int* p = NULL) { ptr = p; }  
  9.   
  10.     // Destructor to deallocate the resource used   
  11.     ~SmartPtr() { delete (ptr); }  
  12.   
  13.     // Overloading dereferencing operator  
  14.     int& operator*() { return *ptr; }  
  15. };  
  16.   
  17. int main()  
  18. {  
  19.     SmartPtr ptr(new int());  
  20.     *ptr = 100;  
  21.     cout << *ptr;  
  22.   
  23.     // We don't need to call delete ptr: when the object  
  24.     // ptr goes out of scope, the destructor for it is automatically  
  25.     // called, and destructor does delete ptr.  
  26.   
  27.     return 0;  
  28. }  


OUTPUT :- 

100


Types of smart pointers in C++

  • Unique_ptr

इस प्रकार की वस्तु केवल एक ही वस्तु को संग्रहित करती है। किसी भिन्न ऑब्जेक्ट को assign करने के लिए, वर्तमान ऑब्जेक्ट को हटा दिया जाता है।


  • shared_ptr

Shared_ptr में, एक ही समय में एक से अधिक ऑब्जेक्ट एक ही पॉइंटर को इंगित कर सकते हैं। use_count() विधि का उपयोग करके ऑब्जेक्ट को निरूपित करने के लिए एक संदर्भ काउंटर बनाए रखा जाता है।


  1. #include <iostream>  
  2. #include <memory>  
  3. using namespace std;  
  4.   
  5. class Rectangle { // Create the class  
  6.     // Data members  
  7.     int length; // length of rectangle   
  8.     int breadth; // breadth of rectangle   
  9.   
  10. public:  
  11.     Rectangle(int l, int b)  
  12.     { // parameterised constructor  
  13.         length = l;   
  14.         breadth = b;  
  15.     }  
  16.   
  17.     int area()  
  18.     { // calculate area of rectangle   
  19.         return length * breadth; // return area   
  20.     }  
  21. };  
  22.   
  23. int main()  
  24. {  
  25.   
  26.     shared_ptr<Rectangle> P1(new Rectangle(20, 5)); // create shared //ptr P1  
  27.     // This'll print 100  
  28.     cout << P1->area() << endl;  
  29.     // Create shared ptr P2  
  30.     shared_ptr<Rectangle> P2;  
  31.     P2 = P1;  
  32.   
  33.     // This'll print 100  
  34.     cout << P2->area() << endl;  
  35.   
  36.     // This'll now not give an error,  
  37.     cout << P1->area() << endl; // prints 100  
  38.   
  39. // reference counter of P2 is 2     
  40.     cout << P1.use_count() << endl; // prints 2   
  41.     return 0;  
  42. }  


OUTPUT :- 

smart pointers in C++
smart pointers in C++



  • Weak_ptr

Weak_ptr साझा सूचक के समान है। अंतर यह है कि यह एक संदर्भ काउंटर नहीं रखता है और सूचक पर वस्तु का कोई मजबूत पकड़ नहीं है। इस गुण के परिणामस्वरूप गतिरोध हो सकता है क्योंकि विभिन्न ऑब्जेक्ट पॉइंटर को होल्ड करने का प्रयास करेंगे।

No comments:

Post a Comment