Информация об изменениях

Сообщение Re: Как наиболее корректно работать с глобальными данными от 07.07.2015 8:13

Изменено 07.07.2015 8:14 MasterZiv

Здравствуйте, lnkuser, Вы писали:


L>Как я понял это как раз случай для синглетона:


L>
L>// other_module.cpp

L>auto g_log = Log::instance();
L>*g_log << loglevel::info << "some text";
L>




L>
L>// other_module2.cpp

L>auto g_log = Log::instance();
L>*g_log << loglevel::info << "some text2";
L>



L>Все вроде идеально, но тут будет ошибка линкования.


На таком уровне понимания проблемы тебе надо сначала почитать книжку по языку С++ или даже С,
потому что модели памяти у них одинаковые.
Почитай про классы памяти, области видимости и static.
В таком раскладе обе переменные auto g_log должны быть объявлены static, иначе будет нарушение ODR.
Re: Как наиболее корректно работать с глобальными данными
Здравствуйте, lnkuser, Вы писали:


L>Как я понял это как раз случай для синглетона:


L>
L>// other_module.cpp

L>auto g_log = Log::instance();
L>*g_log << loglevel::info << "some text";
L>




L>
L>// other_module2.cpp

L>auto g_log = Log::instance();
L>*g_log << loglevel::info << "some text2";
L>



L>Все вроде идеально, но тут будет ошибка линкования.


На таком уровне понимания проблемы тебе надо сначала почитать книжку по языку С++ или даже С,
потому что модели памяти у них одинаковые.
Почитай про классы памяти, области видимости и static.
В таком раскладе обе переменные auto g_log должны быть объявлены static, иначе будет нарушение ODR.

Да, и к работе потоков это не имеет никакого отношения (пока).