שאלה לי אליכם...

antidot

New member
שאלה לי אליכם...

משהו שנשאר באוויר ולאף אחד אין תשובה חד משמעית. מה קורה אם מתוך המטודה של CLASS מסויים אני עושה: delete this ??? האם זה חוקי ? מה אמור לקרות לSTACK ? הדעות התחלקו... מישהו יודע בוודאות ? Antid0t
 

ihovav

New member
לפי מה שאני מכיר

הפקודה הזו תעבוד רק בקונסטרקטור - בסוף של הפונקציה אבל זה בהחלט עובד - מנסיון (וזה לא אומר שזה 100 אחוז חוקי)
 

antidot

New member
שאלו מישהו את השאלה בראיון

מבחינה הגיונית מתבקש שזה לא חוקי אך מסתבר שזה כן. אפשר לעשות DELETE THIS מכל מטודה. מה שכן, אני לא מצליח להבין איך קומפיילר יכול "לעבד" את התופעה. מה קורה עם הזיכרון והSTACK ? זאת השאלה. דרך אגב: זה עובד לא רק בקומפיילרים של מייקרוסופט אלא גם על לינוקס ויוניקס. רעיונות ? Antid0t
 

WarLord

New member
השערה

הרי ה delete לא "מוחק" את הזכרון אלא רק מחזיר אותו למערכת ההפעלה ולכן יתכן שהמתודה ממשיכה להתבצע על הזכרון המשוחרר... למה מערכת ההפעלה לא מתערבת ומעיפה את התוכנית אין לי מושג. כשאתה אומר שזה חוקי אתה מתכוון מבחינת השפה או מבחינת זה שזה עובד ?
 

antidot

New member
טוענים שזה חוקי מבחינת השפה

אני בספק שהמטודה יכולה להמשיך להתבצע. הרי כל המטודות מתבצעות דרך הפויינטר THIS לאובייקט. אחרי שהזיכרון שוחרר למערכת הפעלה, אם נפנה אליו אנחנו אמורים לקבל ACCESS VIOLATION Antid0t
 

ihovav

New member
יש PATTERN בשם

STATE PATTERN - ואחת הדרכים המקובלות למימוש שלו מתבססת על DELETE THIS ככה שטובים מאיתנו כבר דנו בסוגיה הזו - והגיעו למסקנה... לגבי "איך" הקומפיילר מבצע - אני מעריך שהזיכרון לא "מת" מייד עם השחרור - כך שניתן "לרוקן" את ה STACK
 
למעלה