Я следующий код (часть его была опущена для простоты)Ленивая инициализация статических локальных данных
Заголовок:
class DbgModuleMarker
{
public:
DbgModuleMarker(std::string name);
static std::ostream createStream(const DbgModuleMarker& marker);
std::ostream& operator()() const;
};
extern DbgModuleMarker PHYSICS;
Источник:
std::ostream& DbgModuleMarker::operator()() const
{
static std::ostream os = createStream(*this);
return os;
}
цель этого кода должно допускать использование operator()
следующим образом:
debug_modules::PHYSICS() << "Foo" << endl;
Я действительно не знаю, как статичность ведет себя при вызове функции таким образом.
Я бы ожидать функции createStream
будет называться только один раз (или никогда не будет вызываться, если operator()
никогда не называют
Я хотел бы знать, если поведение я жду, что произойдет, и если это могу идею или я делаю что-то очень неправильно, не замечая этого.
Каковы последствия для безопасности потоков и безопасности исключений?
(рассмотрит поток, созданный бы сами поточно-потому что безопасность нити станда :: ostream здесь не моя проблема)