কম্পিউটার

কখন C++ এ ভার্চুয়াল ডেস্ট্রাক্টর ব্যবহার করবেন?

যদি একটি ক্লাসের কোনো ভার্চুয়াল ফাংশন থাকে, তবে এটির একটি ভার্চুয়াল ডেস্ট্রক্টর থাকা উচিত এবং যে ক্লাসগুলি বেস ক্লাস হিসাবে ডিজাইন করা হয়নি বা পলিমরফিকভাবে ব্যবহার করার জন্য ডিজাইন করা হয়নি সেগুলিকে ভার্চুয়াল ডেস্ট্রক্টর ঘোষণা করা উচিত নয়৷

তাই আপনার পলিমরফিক বেস ক্লাসে ধ্বংসকারী ভার্চুয়াল ঘোষণা করা উচিত। কারণ আপনি যদি একটি derived constructor −

ব্যবহার করে বেস ক্লাসের একটি অবজেক্ট তৈরি করেন
Base *b = new Derived();
// use b
delete b;

যদি বেসের ডেস্ট্রাক্টর ভার্চুয়াল না হয় তবে ডিলিট b-এর এই ক্ষেত্রে অনির্ধারিত আচরণ রয়েছে। ডেস্ট্রাক্টরের কল যেকোন নন-ভার্চুয়াল কোডের মত সমাধান করা হবে। তাই বেস ক্লাসের ডেস্ট্রাক্টর বলা হবে কিন্তু ডেরাইভড ক্লাসের একটি নয়, এর ফলে রিসোর্স লিক হবে।



  1. কিভাবে C++ এ কনস্ট্রাক্টরের ভিতরে একটি ভার্চুয়াল ফাংশন কল করবেন?

  2. একটি স্মার্ট পয়েন্টার কি এবং কখন আমি এটি C++ এ ব্যবহার করব?

  3. আমি কখন একটি ফরওয়ার্ড ঘোষণা C/C++ ব্যবহার করতে পারি?

  4. আপনার কখন C++ এ 'বন্ধু' ব্যবহার করা উচিত?