যদি একটি ক্লাসের কোনো ভার্চুয়াল ফাংশন থাকে, তবে এটির একটি ভার্চুয়াল ডেস্ট্রক্টর থাকা উচিত এবং যে ক্লাসগুলি বেস ক্লাস হিসাবে ডিজাইন করা হয়নি বা পলিমরফিকভাবে ব্যবহার করার জন্য ডিজাইন করা হয়নি সেগুলিকে ভার্চুয়াল ডেস্ট্রক্টর ঘোষণা করা উচিত নয়৷
তাই আপনার পলিমরফিক বেস ক্লাসে ধ্বংসকারী ভার্চুয়াল ঘোষণা করা উচিত। কারণ আপনি যদি একটি derived constructor −
ব্যবহার করে বেস ক্লাসের একটি অবজেক্ট তৈরি করেনBase *b = new Derived(); // use b delete b;
যদি বেসের ডেস্ট্রাক্টর ভার্চুয়াল না হয় তবে ডিলিট b-এর এই ক্ষেত্রে অনির্ধারিত আচরণ রয়েছে। ডেস্ট্রাক্টরের কল যেকোন নন-ভার্চুয়াল কোডের মত সমাধান করা হবে। তাই বেস ক্লাসের ডেস্ট্রাক্টর বলা হবে কিন্তু ডেরাইভড ক্লাসের একটি নয়, এর ফলে রিসোর্স লিক হবে।