چرا destructor‌ یک کلاس با متدهای virtual باید virtual باشد؟

فرض کنید دو کلاس داریم که از هم ارث میبرند:

نکته مهم در اینجا اینه که classB برای صدازدن توابعش کلی از منابع سیستم مصرف میکنه. البته این کلاس نابود کننده خودش رو هم داره. اما به سناریوی زیر توجه کنید:

در اینجا اگرچه متغیر a از نوع classA است اما در واقع از classB استفاده میکنیم. اما موقع نابود کردن، چون متغیر از نوع classA بوده، نابودگر classB صدا زده نمیشه و منابع مصرف شده آزاد نمیشن. راه حل اینه که از همون اول نابود گر یه کلاس virtual رو به شکل virtual تعریف کرد. به این ترتیب نابودگرهای کلاسهای فرزند هم فراخوانی خواهند شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *