שאלות סינגלטון

ella76

New member
שאלות סינגלטון

שלום, כמה שאלות בנוגע לסינגלטון:
ראיתי אפשרות לייצר class שהוא סינגלטון ע"י יצירת האובייקט בפונקציה הסטטית והחזרתו כ- reference:
static Singelton& Instance() { static Singelton obj; return obj; }​
מה החסרון של צורה זו של יצירת סינגלטון על פני הצורה הרגילה שבא מגדירים פוינטר ב- dm ומקציאים אותו ע"י new בפונקציה?
מדוע אי אפשר לממש D'tor בסינגלטון שמוגדר עם הפוינטר? מדוע זה חשוב בכלל (הרי הסינגלטון הוא אובייקט יחיד וישוחרר בסוף התוכנית בינכך)?
האם יש דרך פשוטה לפתור את בעיית השחרור של הפוינטר בסינגלטון, חוץ מיצירת מחלקה נוספת שתנהל את המחיקה שלו (class freind ומימוש פונ' destroy כ- private)?
האם יש אפשרות להשתמש ב- smart pointer כדרך לפתרון הבעיה הנ"ל, ואם כן, איך? תודה לעונים
 

עידו פ

New member
-->

מהדוגמה שנתת נראה שאת עובדת ב-++C, אם כך: 1. אני לא בטוח שיש פה עניין של חסרון ויתרון, פשוט יש הבדל. למיטב זכרוני בשפות כגון הנ"ל, יש הבדל בין הקצאת הזכרון עבור אובייקטים סטטיים לבין הקצאת הזכרון עבור אובייקטים המוקצים עם new (אחד ב-stack והשני ב-heap, לא זוכר איזה בדיוק). 2. אם הסינגלטון מוגדר כסטטי באמת זה חסר טעם להגדיר dtor (הרי הוא יופעל רק בסוף התוכנית) 3. הבעיה בסינגלטון היא שאת לא יודעת כמה רפרנסים יהיו לסינגלטון ולכן יכול להיווצר מצב שעד סוף התוכנית יהיה איפשהו בקוד משתנה שיחזיק אל הפוינטר של רפרנס ואז כל הרעיון של לעשות dtor ש"ינקה" את הזכרון הוא חסר טעם 4. לגבי smart pointer אני מציע שתשאלי בפורום שפות תכנות, שם הם אמורים להתמחות בשפות כגון ++C
 
למעלה