এই সমস্যায় আমরা দেখব কিভাবে আমরা এমন একটি শ্রেণী তৈরি করতে পারি যার জন্য আমরা শুধুমাত্র গতিশীল মেমরি বরাদ্দের মাধ্যমে বস্তু তৈরি করতে পারি, কোনো সরাসরি বস্তু তৈরির অনুমতি নেই।
ধারণা সহজ. আমাদের সেই শ্রেণীর জন্য প্রাইভেট ডেস্ট্রাক্টর তৈরি করতে হবে। যখন ধ্বংসকারী প্রাইভেট হয়, তখন কম্পাইলার অ-গতিশীলভাবে বরাদ্দকৃত বস্তুর জন্য একটি কম্পাইলার ত্রুটি তৈরি করবে কারণ কম্পাইলারকে সেগুলিকে স্ট্যাক সেগমেন্ট থেকে অপসারণ করতে হবে একবার ব্যবহার করার জন্য উপলব্ধ না হলে। গতিশীলভাবে বরাদ্দ করা বস্তুর জন্য, প্রোগ্রামার বস্তু মুছে ফেলার জন্য দায়ী, কিন্তু কম্পাইলার এর জন্য দায়ী নয়, তাই এটি গতিশীলভাবে বস্তু তৈরি করার অনুমতি দেয়।
মেমরি লিক এড়ানোর জন্য, আমরা একটি ফ্রেন্ড ফাংশন ব্যবহার করব যা ক্লাসের ব্যবহারকারীরা অবজেক্ট ধ্বংস করার জন্য কল করতে পারে।
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#includenamespace ব্যবহার করে std;class NoDirectObjClass { ব্যক্তিগত:~NoDirectObjClass() { cout <<"NoDirectObjClass অবজেক্ট ধ্বংস করা" < আউটপুট
বন্ধু ব্যবহার করে অবজেক্ট ডিস্ট্রয়িং NoDirectObjClass অবজেক্ট তৈরি করাযদি আমরা গতিশীল মেমরি বরাদ্দ না ব্যবহার করে সরাসরি বস্তু তৈরি করার চেষ্টা করি, তাহলে এটি নিম্নরূপ আউটপুট তৈরি করবে -
উদাহরণ (C++)
#includenamespace ব্যবহার করে std;class NoDirectObjClass { ব্যক্তিগত:~NoDirectObjClass() { cout <<"NoDirectObjClass অবজেক্ট ধ্বংস করা" < আউটপুট
main.cpp:ফাংশনে 'int main()':main.cpp:22:22:ত্রুটি:'NoDirectObjClass::~NoDirectObjClass()' এই প্রসঙ্গের মধ্যে ব্যক্তিগত NoDirectObjClass t1; ^~main.cpp:6:9:নোট:এখানে ব্যক্তিগত ঘোষণা করা হয়েছে ~NoDirectObjClass() { ^