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

C++ में पॉइंटर्स, स्मार्ट पॉइंटर्स और शेयर्ड पॉइंटर्स

पॉइंटर्स

पॉइंटर्स का उपयोग वेरिएबल के एड्रेस को स्टोर करने के लिए किया जाता है।

सिंटैक्स

Type *pointer;

आरंभीकरण

Type *pointer;
Pointer = variable name;

कार्य

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

उदाहरण

#include <iostream>
using namespace std;
int main() {
   // A normal integer variable
   int a = 7;
   // A pointer variable that holds address of a.
   int *p = &a;
   // Value stored is value of variable "a"
   cout<<"Value of Variable : "<<*p<<endl;
   // It will print the address of the variable "a"
   cout<<"Address of Variable : "<<p<<endl;
   // reassign the value.
   *p = 6;
   cout<<"Value of the variable is now: "<<*p<<endl;
   return 0;
}

आउटपुट

Value of Variable : 7
Address of Variable : 0x6ffe34
Value of the variable is now: 6

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 dereferencing operator
   T & operator * () {
      return *p;
   }
   // Overloding 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

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

shared_ptr स्मार्ट पॉइंटर के रूप में से एक है जिसे सी ++ पुस्तकालयों द्वारा कार्यान्वित किया जा सकता है। यह कच्चे सूचक का एक कंटेनर है और एक संदर्भ गिनती (किसी वस्तु, स्मृति के ब्लॉक, डिस्क स्थान या अन्य संसाधनों जैसे संसाधन के संदर्भ, पॉइंटर्स या हैंडल की संख्या को संग्रहीत करने की एक तकनीक) सहयोग में इसके निहित सूचक की स्वामित्व संरचना है Shared_ptr की सभी प्रतियों के साथ।

एक ऑब्जेक्ट जिसे निहित कच्चे सूचक द्वारा संदर्भित किया जाता है, केवल तभी नष्ट हो जाएगा जब सभी प्रतिलिपि साझा_ptr से नष्ट हो जाती है।

उदाहरण

#include<iostream>
#include<memory>
using namespace std;
int main() {
   shared_ptr<int> ptr(new int(7));
   shared_ptr<int> ptr1(new int(6));
   cout << ptr << endl;
   cout << ptr1 << endl;
   // Returns the number of shared_ptr objects
   // referring to the same managed object.
   cout << ptr.use_count() << endl;
   cout << ptr1.use_count() << endl;
   // Relinquishes ownership of ptr on the object
   // and pointer becomes NULL
   ptr.reset();
   cout << ptr.get() << endl;
   cout << ptr1.use_count() << endl;
   cout << ptr1.get() << endl;
   return 0;
}

आउटपुट

0xe80900
0xe80940
1
1
0
1
0xe80940

  1. सी/सी++ पॉइंटर्स बनाम जावा संदर्भ

    पॉइंटर्स C, C++ प्रोग्रामिंग भाषाओं में, पॉइंटर एक वेरिएबल होता है जिसमें दूसरे वेरिएबल का पता होता है। उदाहरण #include <iostream> using namespace std;   int main() {    //int variable    int i = 8;    //pointer variable    int * pI;    

  1. स्मार्ट पॉइंटर क्या है और मुझे इसे C++ में कब इस्तेमाल करना चाहिए?

    एक स्मार्ट पॉइंटर एक ऐसा वर्ग है जो कच्चे (या नंगे) सी ++ पॉइंटर को लपेटता है। इसका उपयोग पॉइंटर द्वारा इंगित संसाधनों को प्रबंधित करने के लिए किया जाता है। उदाहरण के लिए, यदि उस स्मृति स्थान का संदर्भ खो जाता है। यह एक तरह से कचरा संग्रहकर्ता की तरह काम करता है। कई स्मार्ट पॉइंटर प्रकार हैं। आप

  1. C++ में पॉइंटर वेरिएबल और रेफरेंस वेरिएबल में क्या अंतर हैं?

    संदर्भ जब एक चर को संदर्भ के रूप में घोषित किया जाता है, तो यह मौजूदा चर के लिए एक वैकल्पिक नाम बन जाता है। वाक्यविन्यास Type &newname = existing name; आरंभीकरण Type &pointer; pointer = variable name; पॉइंटर्स पॉइंटर्स का इस्तेमाल वैरिएबल के एड्रेस को स्टोर करने के लिए किया जाता है। सिंटै