স্মার্ট পয়েন্টার হলো একটি ক্লাস যা র (raw) C++ পয়েন্টারকে র্যাপ করে এবং যেই রিসোর্সটি পয়েন্ট করে সেটির ম্যানেজমেন্ট করে (RAII)। এটি একটি কয়াসি-গারবেজ কলেক্টরের মতো কাজ করে।
প্রধান স্মার্ট পয়েন্টার (C++11+)
- std::unique_ptr: এক্সক্লूसিভ অনারশিপ, কপি করা যায় না (মুভ করা যায়), শূন্য ওভারহেড। ডিফল্ট চয়েস।
- std::shared_ptr: শেয়ার্ড অনারশিপ, রেফারেন্স কাউন্টিং, কিছু ওভারহেড। যখন একাধিক অনার থাকবে।
- std::weak_ptr:
shared_ptr-এর নন-অনারশিপ অবজারভার, সাইকリック রেফারেন্স ব্রেক করতে।
কেন ব্যবহার করবেন?
- ম্যানুয়াল
new/deleteএড়াতে (মেমরি লিক, এক্সসেপশন সেফটি সমস্যা) - অনারশIP সেমানটিক্স স্পষ্ট করতে (unique vs shared)
- RAII নিশ্চিত করতে (স্কোপ শেষ হলে অটো ক্লিনআপ)
উদাহরণ
#include <memory>
#include <iostream>
void use_unique() {
auto p = std::make_unique<int>(42); // C++14
std::cout << *p;
} // p ডিস্ট্রয় হলে মেমরি অটোমেটিক মুক্ত
void use_shared() {
auto p1 = std::make_shared<int>(10);
auto p2 = p1; // রেফারেন্স কাউন্ট = 2
} // শেষ shared_ptr ডিস্ট্রয় হলে মেমরি মুক্ত
সুপারিশ: প্রায় সব সময় unique_ptr ব্যবহার করুন। shared_ptr শুধু শেয়ার্ড অনারশIP দরকার হলে। new/delete ম্যানুয়ালি লিখবেন না।