[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Объявление глобальных переменных в c.



You (casus@casus.us) wrote:

 >> которые ещё не уяснили, что в данном месте имеется нехорошая
 >> зависимость от порядка инициализации глобальных переменных,

 AP> А? Кто сказал что есть? Помимо конструкторов бывает ещё метод
 AP> Init, который мы ручками зовём в нужном порядке.

А вот кто сказал:

----------------------------------------------------------------------
> Ровно до тех пор, пока в конструкторе MainServerConfig не захочется
> что-нибудь залогировать; или наоборот -- пока конструктор логгера на
> захочет узнать из конфигурации, куда собственно писать будем. Это
> все про C++, конечно.
----------------------------------------------------------------------

Не говоря уж о том, что Init() ручками - это ужос-ужос, и его нужно в
RAII-обёртку пихать, а эту обёртку опять инициализировать. При Init()
мы можем звать уже после глобальных конструкторов, а обёртку или
после, или в непредсказуемом порядке.

 AP> Вариант. Ну спрячем мы указатель на объект в статическом методе
 AP> объекта, примерно то же самое Артём Чуприна предлагает. Но
 AP> наступления счастья, по сравнению с одним глобальным объектом, я
 AP> не вижу. Всё то же самое, в общем-то, только вызывать менее
 AP> удобно.

"объект" реализует интерфейс (в общем смысле) очень обширный. Его
операции включают и получение указателя/ссылки на объект, и явный
вызов деструктора, и прочую байду типа конверсии типов, а это,
опять-таки, нарушает принцип минимума привилегий: нет возможности
чего-то легально сделать - нет проблемы, что кто-то это легально
сделает.

-- 
JID: dottedmag@jabber.dottedmag.net



Reply to: