কনসেপ্ট
একটি ক্লাস ডিজাইন করা যাতে সেটির অবজেক্ট শুধু ডাইনামিক মেমোরি অ্যালোকেশন (new) দিয়ে তৈরি করা যায়, স্ট্যাক-ভিত্তিক সরাসরি অবজেক্ট তৈরি ব্লক করা হয়।
টেকনিক
- প্রাইভেট ডিস্ট্রাক্টর: ডিস্ট্রাক্টরকে
privateকরলে কম্পাইলার স্ট্যাক অবজেক্টের জন্য ডিস্ট্রাক্টর কল করতে পারে না, তাই এরর দেয়। - ফ্রেন্ড ফাংশন: মেমরি লিক এড়াতে একটি ফ্রেন্ড ফাংশন দিয়ে অবজেক্ট ডিলিট করার সুবিধা দিয়ে দিন।
উদাহরণ: সফল ডাইনামিক অ্যালোকেশন
#include <iostream>
using namespace std;
class NoDirectObjClass {
private:
~NoDirectObjClass() {
cout << "Destroying NoDirectObjClass object" << endl;
}
public:
NoDirectObjClass() { cout << "Creating object" << endl; }
friend void friend_destructor(NoDirectObjClass* );
};
void friend_destructor(NoDirectObjClass* p) {
delete p;
cout << "Destroying object using friend" << endl;
}
int main() {
NoDirectObjClass *p = new NoDirectObjClass;
friend_destructor(p);
}
Creating object Destroying NoDirectObjClass object Destroying object using friend
উদাহরণ: স্ট্যাক অবজেক্ট তৈরি করলে কম্পাইল এরর
int main() {
NoDirectObjClass t1; // কম্পাইল এরর!
}
error: 'NoDirectObjClass::~NoDirectObjClass()' is private within this context
ব্যাখ্যা
- স্ট্যাক অবজেক্টের ডিস্ট্রাক্টর কম্পাইলার স্বয়ংক্রিয় কল করে, যা প্রাইভেট হলে অ্যাক্সেসIBLE নয়।
- হিপ অবজেক্টের ডিস্ট্রাক্টর প্রোগ্রামার ম্যানুয়ালি কল করে (
delete), তাই প্রাইভেট ডিস্ট্রাক্টরও অ্যাক্সেসIBLE (ফ্রেন্ড ফাংশন বা মেম্বার ফাংশন দিয়ে)।