পয়েন্টার (Pointers)
পয়েন্টার ভেরিয়েবলের ঠিকানা সংরক্ষণ করতে ব্যবহৃত হয়।
সিনট্যাক্স
Type *pointer;
ইনিশিয়ালাইজেশন
Type *pointer; Pointer = variable name;
কর্মক্ষমতা
- পয়েন্টার ভেরিয়েবলের ঠিকানা সংরক্ষণ করে।
- পয়েন্টারে NULL মান অ্যাসাইন করা যায়।
- পয়েন্টার পাস বাই রেফারেন্স দিয়ে রেফারেন্স করা যায়।
- একটি পয়েন্টারের নিজস্ব মেমরি ঠিকানা এবং স্ট্যাকে আকার থাকে।
উদাহরণ কোড
#include <iostream>
using namespace std;
int main() {
// একটি সাধারণ ইন্টিজার ভেরিয়েবল
int a = 7;
// একটি পয়েন্টার ভেরিয়েবল যা a-এর ঠিকানা ধারণ করে
int *p = &a;
// সংরক্ষিত মান হলো ভেরিয়েবল "a"-র মান
cout << "Value of Variable: " << *p << endl;
// এটি ভেরিয়েবল "a"-র ঠিকানা প্রিন্ট করবে
cout << "Address of Variable: " << p << endl;
// মান পুনরায় অ্যাসাইন
*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;
// জেনেরিক স্মার্ট পয়েন্টার ক্লাস টেমপ্লেট
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
C++-এ শেয়ার্ড পয়েন্টার (Shared Pointers)
shared_ptr হলো C++ লাইব্রেরি দ্বারা ইমপ্লিমেন্ট করা স্মার্ট পয়েন্টার এর একটি রূপ। এটি একটি কন্টেইনার যা র待 পয়েন্টার এবং একটি রেফারেন্স কাউন্টিং (একটি রিসোর্সের প্রতি রেফারেন্স, পয়েন্টার বা হ্যান্ডেলের সংখ্যা সংরক্ষণ করার কৌশল - যেমন অবজেক্ট, মেমরি ব্লক, ডিস্ক স্পেস বা অন্যান্য রিসোর্স) অơnারশিপ স্ট্রাকচার ধারণ করে যা এর সব কপির সাথে সহযোগিতায় এর ধারিত পয়েন্টারের ওনারশিপ ম্যানেজ করে।
যে অবজেক্টটি ধারিত র待 পয়েন্টার দ্বারা রেফারেন্স করা হয়েছে, সেটি তখনই ধ্বংস হবে যখন shared_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;
// একই ম্যানেজড অবজেক্টকে রেফার করে shared_ptr অবজেক্টের সংখ্যা ফেরত দেয়
cout << ptr.use_count() << endl;
cout << ptr1.use_count() << endl;
// অবজেক্টের ওনারশিপ ছাড়া ptr 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