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