 virtual destructor מתי צריך?

 virtual destructor מתי צריך?

בפולימורפיזם , אני רוצה לחדד נקודה אשמח להסבר מתי משתמשים בדיסטרקטור וירטואלי
אם יש לי A(אב) ו B יורשת מ A
ואז אני ב MAIN לדוגמא עושה מצביע של A שיכול הרי להצביע על B (אב יכול להצביע על בן)
ואז אני עושה DELETE למצביע (או בכללי כאשר תגמר התוכנית המצביע הרי ימחק) אז יופעל רק הדיסטרקטור של האב-כיוון שההורס מופעל לפי סוג המצביע ולא יופעל גם של הבן, לכן עושים באב virtual destructor עד כאן נכון?
עכשיו ... זה תמיד בעיה? או רק כאשר אני מגדיר הקצאה דינאמית בבן/באב/בשניהם/לא משנה?

כמו כן, במידה ויש לי הקצאה דינאמית, (סתם לידע כללי) , אם אני לא עושה לה DELETE היא לא תמחק לעולם? הדיסטרקטור עוזר רק למה שהוגדר לא דינאמית?
לדוגמא אם אני עושה
student st1;
יצרתי אובייקט מסוג סטודנט , הוא ימחק כאשר אצא מהסקופ(מהפונקציה/מהMAIN )
אבל אם הייתי עושה
student *st1=new student
הוא לעולם לא ימחק אלא אם כן אעשה DELETE על המצביע?(או שכאשר אצא מהסקופ הדיסטרקטור יופעל ואז בתוכו אצטרך להגדיר מחיקה?)

תודה
 

פרסאוס

New member
מצביעים שלא נמחקו ישארו עד ליציאת התוכנית.

ביציאת מהתוכנית הזכרון משוחרר אם שחררת אותו או לא.
מגדירים מפרק וירטואלי בכל מקום שנוצרה בו טבלה וירטואלית (ככלל).
אם לא הגדרת מפרק וירטואלי ואין לך קריאה למפרק ממצביע אב, אתה צודק והכל בסדר.
כמובן שאתה לא יכול לדעת שזה מה שיקרה ולכן לא עושים את זה.
 
למעלה