2013-03-04 3 views
0

Привет, переполнение стека.Почему Синглтон лучше, чем глобальные объекты

Я учусь на экзамен CS, у меня есть завтра, и я просматриваю лист обзора, который наш профессор предоставил нам. Один из пунктов говорит, чтобы знать, почему Синглтон - лучший выбор, чем Глобальный.

Я не совсем уверен в рассуждениях, но я помню, как он говорил что-то о Синглтоне, используя меньше «загрязнения пространства имен». Я сделал несколько поисковых запросов Google, сравнивающих Singleton и Global, но почти все результаты говорят о том, что оба являются плохими вариантами lol. Так что это меня просто смутило.

Если кто-нибудь может помочь мне прояснить это, мы будем очень благодарны. Благодаря!

+4

EWW, одиночки. – chris

+3

Singletons * - * глобальные объекты. Это похоже на вопрос, почему методы - лучший выбор, чем функции-члены. – Pubby

+1

Ну, есть [статическое фиаско инициализации ордера] (http://www.parashift.com/c++-faq/static-init-order.html), которое является нисходящим, но ни один из них не является большим. –

ответ

1

Они ленивы построено:

LargeObject global;     // Large object is always constructed. 

class LargeObject_Singelton 
{ 
    public: static LargeObject& getInstance() 
    { 
     static LargeObject instance;  // This object is not created until the first 
     return instance;     // time getInstance() is called. 
    }          // If you never use it this can be important. 
}; 
+2

Хм. Можете ли вы объяснить немного более подробно, пожалуйста? – ModdedLife

+1

Может быть ленив построен. Lazy construction на самом деле является проблемой, если к ним может обращаться несколько потоков (так как вам нужен другой глобальный объект для блокировки первого вызова экземпляра). –

+0

@ john.pavan: Не верно в C++ 11 и в C++ 03 gcc это не проблема. В C++ 03 в DevStuio некоторая работа, но не серьезная проблема: http://stackoverflow.com/a/449823/14065 –

Смежные вопросы