سلام!

همان طور که می دانید، تابع مخرب یا destructor به طور پیش فرض در همه ی کلاس ها وجود دارد. چگونگی تغییر آن را نیز در این مطلب توضیح دادیم. حالا می خواهیم همین تابع مخرب را به صورت مجازی تعریف کنیم. برای این کار کافی است کلمه ی virtual را به اوّل اسم تابع مخرب اضافه کنیم. به عنوان مثال Prototype تابع مخرب در کلاس Test به صورت زیر خواهد بود؛

virtual ~Test();

فایده ی این کار در چیست؟ به این برنامه دقّت کنید. در این برنامه تنها تابع مخرّب base صدا زده می شود. بنابراین اگر در derived یک آرایه ی پویا وجود داشته باشد، همان طور در heap باقی می ماند. برای حلّ این مشکل باید تابع مخرّب را به صورت مجازی تعریف کنید. به این برنامه نگاه کنید. اگر به خروجی این برنامه نگاه کنید، متوجّه می شوید که تابع مخرب derived هم صدا زده شده است.

موفق باشید!