কম্পিউটার টিউটোরিয়াল

C++-এ শুধু ডাইনামিক্যালি অ্যালোকেটেড অবজেক্ট তৈরি যেনיתן এমন ক্লাস বানানো


কনসেপ্ট

একটি ক্লাস ডিজাইন করা যাতে সেটির অবজেক্ট শুধু ডাইনামিক মেমোরি অ্যালোকেশন (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 (ফ্রেন্ড ফাংশন বা মেম্বার ফাংশন দিয়ে)।
  1. Android-এ কাস্টম অবজেক্টকে Serializable করার উপায়

  2. Android-এ কাস্টম অবজেক্টকে Parcelable করার উপায়

  3. জাভাতে JTextField-কে কেবল সংখ্যা গ্রহণ করার জন্য কীভাবে বাধ্য করবেন?

  4. পাইথন ক্লাস অবজেক্ট কীভাবে ইনহেরিট করে?