次のコードがあります(簡単にするために一部を省略しました)
ヘッダ:
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;
この方法で関数が呼び出されたときに static がどのように動作するかは本当にわかりません。
私は関数が一度だけ呼び出されることを期待しますcreateStream
(または呼び出されない場合operator()
は呼び出されません
私が期待している動作が起こるかどうか、これが考えられるアイデアなのか、それとも気づかずに非常に間違ったことをしているのかを知りたいです。
スレッドの安全性と例外の安全性にはどのような影響がありますか?
( std::ostream のスレッドセーフはここでは問題にならないため、作成されたストリーム自体がスレッドセーフになると考えてください)