singleton בלי new?...

singleton בלי new?...../images/Emo26.gif

מישהו מכיר דרך לממש singleton בלי הקצאה דינמית (כלומר בלי new בקריאה הראשונה ל-instance)? [CPP כמובן...]
 

עידו פ

New member
תקן אותי אם אני טועה

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

עידו פ

New member
אבל מה הסינגלטון כאן ?

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

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

Pay attention to put the c'tor as private so no one can create an instance rather than MyClass::Instance()!
class MyClass { public: static MyClass& Instance() { static MyClass s_singleton; return s_singleton; } private: // c'tor MyClass(); };​
 
למעלה