C++相談室 part28
■ このスレッドは過去ログ倉庫に格納されています
0144デフォルトの名無しさん
NGNGint i=0;
struct A {
A() {i=1;}
static A & a() {
static A a;
return a;
}
private: static A * ap; // (*)
};
A * A::ap=&A::a(); // (*)
int main() {
A & ap=A::a(); // (**)
return 0;
}
(*)の部分がない場合は(**)の呼び出し前後でiの値が
変わることになる。(*)の部分があるとmainの呼び出し前に
A::a()の呼び出しが行われているみたいだけど、
これってC++の仕様的に保証されているのでしょうか?
Singletonのインスタンスにmain前にアクセス可能にする場合
上みたいに実装すること思うけど、スレッド安全性の確保の
為に、main前にはA::a()が呼び出されていて欲しくてこんな風に
してみた。まあ、mainの先頭で手動で呼び出してもいいんだけど。
apに誰もアクセスしないので最適化で消えちゃうかなあ?
■ このスレッドは過去ログ倉庫に格納されています