ভার্চুয়াল ডেস্ট্রাক্টরগুলি দরকারী যখন আপনি সম্ভাব্যভাবে কোনও বুনো ক্লাসের পয়েন্টারের মাধ্যমে একটি উত্পন্ন শ্রেণীর উদাহরণ মুছতে পারেন:
class Base
{
// some virtual methods
};
class Derived : public Base
{
~Derived()
{
// Do some important cleanup
}
};
এখানে, আপনি বিজ্ঞপ্তি পাবেন যে আমি বেস এর বিনাশকারী হতে ডিক্লেয়ার করা হয়নি virtual। এখন, নীচের স্নিপেটটি একবার দেখে নেওয়া যাক:
Base *b = new Derived();
// use b
delete b; // Here's the problem!
যেহেতু বেসের ডেস্ট্রাক্টর নয় virtualএবং bএটি Base*কোনও Derivedবস্তুর প্রতি নির্দেশক , delete bতাই অপরিবর্তিত আচরণ :
[ইন delete b], যদি মুছে ফেলা বস্তুর স্থিতিশীল প্রকারটি তার গতিশীল প্রকারের থেকে পৃথক হয়, স্থির প্রকারটি মুছে ফেলার জন্য বস্তুর গতিশীল ধরণের একটি বেস শ্রেণি হবে এবং স্থির ধরণের ভার্চুয়াল ডেস্ট্রাক্টর বা আচরণ অনির্দিষ্ট হয় ।
বেশিরভাগ বাস্তবায়নে, ডেস্ট্রাক্টরের কাছে কলটি কোনও নন-ভার্চুয়াল কোডের মতো সমাধান করা হবে, যার অর্থ বেস শ্রেণীর ধ্বংসকারীকে ডাকা হবে তবে উত্পন্ন শ্রেণীর এক নয়, যার ফলে সংস্থানগুলি ফাঁস হবে।
সংক্ষিপ্তসার হিসাবে, সর্বদা বেস ক্লাসগুলির ডেস্ট্রাক্টরগুলি তৈরি করুন virtualযখন তাদের বোঝানো হচ্ছে বহুবর্ষে ম্যানিপুলেট করা।
আপনি যদি বেস ক্লাস পয়েন্টারের মাধ্যমে কোনও উদাহরণ মুছতে মুছতে বাধা দিতে চান, তবে আপনি বেস শ্রেণীর ডেস্ট্রাক্টরকে সুরক্ষিত এবং অবিশ্বাস্য করতে পারেন; এটি করে, সংকলক আপনাকে কল করতে দেবে নাdelete কোনও বেস ক্লাস পয়েন্টার ।
আপনি ভেষজ সুত্র থেকে এই নিবন্ধে ভার্চুয়ালতা এবং ভার্চুয়াল বেস শ্রেণীর ডেস্ট্রাক্টর সম্পর্কে আরও শিখতে পারেন ।