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: