C++-এ ডেস্ট্রাক্টর private ডিক্লেয়ার করলে অবজেক্ট কনস্ট্রাকশন ও ডেস্ট্রাকশন নিয়ন্ত্রণ করা যায়। এটি সিঙ্গলটন প্যাটার্ন, ফ্যাক্টরি মেথড, বা রেফারেন্স কাউন্টিং-এ ব্যবহার হয়।
কেস ১: কোনো অবজেক্ট নেই - কম্পাইল এরর নেই
class MyClass { private: ~MyClass() {} };
int main() { } // OK
কেস ২: স্ট্যাক অবজেক্ট তৈরি - কম্পাইল এরর
class MyClass { private: ~MyClass() {} };
int main() { MyClass obj; } // Error: destructor is private
কেস ৩: পয়েন্টার ডিক্লেয়ার (অবজেক্ট নেই) - OK
int main() { MyClass* obj; } // OK, কোনো অবজেক্ট কনস্ট্রাক্ট হয়নি
কেস ৪: new দিয়ে হিপ অবজেক্ট - OK (কম্পাইলার দায়দা programmers's)
int main() { MyClass* obj = new MyClass; } // OK, কিন্তু delete করা যাবে না
কেস ৫: delete কল করলে - কম্পাইল এরর
int main() { MyClass* obj = new MyClass; delete obj; } // Error: destructor is private
ব্যবহার ক্ষেত্র
- সিঙ্গলটন: প্রাইভেট ডেস্ট্রাক্টর + স্ট্যাটিক ফ্যাক্টরি মেথড।
- রেফারেন্স কাউন্টিং: শুধু রেফারেন্স কাউন্ট ০ হলে ডিলিট করা যায়।
- পুল অ্যালোকেশন: অবজেক্ট পুলে রিটার্ন করতে বাধ্য করা।
সতর্কতা: প্রাইভেট ডেস্ট্রাক্টর থাকলে std::unique_ptr, std::shared_ptr ব্যবহার করতে কাস্টম ডিলিটার লাগবে।