2

a.cpp

static Foo fooobj;
void Usefoo()
{
    foooobj.somefunc();
}

b.cpp

static Bar barobj;

そして、ここにのコンストラクターがありますBar

 Bar::Bar()
 {
     Usefoo();
 }

これは静的初期化命令の大失敗につながりますか? はいの場合、どうすれば解決できますか。以下のようなことを考えました。

Foo* GetFoo*()
{
    static Foo *fooobj = new Foo();
    return fooobj;
}

しかし、私は C++11 をサポートしていないため、静的ローカル初期化はスレッド セーフではありません。したがって、これは機能しません。

barobjまた、静的でない場合はどうなりますか。じゃあ、この大失敗は気にしなくていいよね?別の翻訳単位での別の非静的オブジェクトの初期化に依存している非静的オブジェクトの初期化の場合、問題はありません。右?

4

1 に答える 1