কম্পিউটার

পয়েন্টার, স্মার্ট পয়েন্টার এবং 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++ এ স্মার্ট পয়েন্টার

স্মার্ট পয়েন্টার হল একটি বিমূর্ত ডেটা টাইপ যা ব্যবহার করে আমরা এমনভাবে একটি সাধারণ পয়েন্টার তৈরি করতে পারি যাতে এটি ফাইল হ্যান্ডলিং, নেটওয়ার্ক সকেট ইত্যাদির মতো মেমরি ম্যানেজমেন্ট হিসাবে ব্যবহার করা যেতে পারে, এছাড়াও এটি স্বয়ংক্রিয় ধ্বংস, রেফারেন্স গণনা ইত্যাদির মতো অনেক কিছু করতে পারে।

C++ এ স্মার্ট পয়েন্টার, টেমপ্লেট ক্লাস হিসাবে প্রয়োগ করা যেতে পারে, যা * এবং -> অপারেটরের সাথে ওভারলোড করা হয়। auto_ptr, shared_ptr, unique_ptr এবং weak_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 হল স্মার্ট পয়েন্টারের একটি ফর্ম যা C++ লাইব্রেরি দ্বারা প্রয়োগ করা যেতে পারে। এটি কাঁচা পয়েন্টারের একটি ধারক এবং একটি রেফারেন্স গণনা (কোনও বস্তু, মেমরির ব্লক, ডিস্ক স্পেস বা অন্যান্য সংস্থানগুলির মতো একটি সংস্থানের রেফারেন্স, পয়েন্টার বা হ্যান্ডেলগুলির সংখ্যা সংরক্ষণ করার একটি কৌশল) সহযোগিতায় এর অন্তর্ভুক্ত পয়েন্টারের মালিকানা কাঠামো। শেয়ার্ড_পিটিআরের সমস্ত কপি সহ।

একটি বস্তু যা অন্তর্ভুক্ত কাঁচা পয়েন্টার দ্বারা উল্লেখ করা হয় শুধুমাত্র তখনই ধ্বংস করা হবে যখন শেয়ার্ড_পিটিআর-এর সমস্ত অনুলিপি ধ্বংস করা হবে।

উদাহরণ

#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++ এ ডিলিট() এবং ফ্রি()

  2. C/C++ পয়েন্টার বনাম জাভা রেফারেন্স

  3. একটি স্মার্ট পয়েন্টার কি এবং কখন আমি এটি C++ এ ব্যবহার করব?

  4. একটি পয়েন্টার ভেরিয়েবল এবং C++ এ একটি রেফারেন্স ভেরিয়েবলের মধ্যে পার্থক্য কী?