次のような原因不明の動作が発生しました。
ケース1:
a.cpp
.dllライブラリとしてコンパイルされ、のmain()で使用されます。main.cpp
Bar b;
//constr
Bar::Bar(){
//... initialize members
}
//private library init
Bar::init(){ ...}
//public API init
bool lib_init(){
b.init();
}
私が理解していることから、このアプローチは、グローバルの未定義の初期化動作が原因で失敗する可能性があります。
ケース2:
a.cpp
.dllライブラリとしてコンパイルされ、のmain()で使用されます。main.cpp
Bar* b;
//constr
Bar::Bar(){
//... initialize members
}
//private library init
Bar::init(){ ...}
//public API init
bool lib_init(){
b = new Bar;
b->init();
}
今回は、動的割り当てを使用すると機能します。
ケース3(最も驚くべき)
a.cpp
.dllライブラリとしてコンパイルされ、のmain()で使用されます。main.cpp
static Bar& getBarObj()
{
static Bar g_objBar;
return g_objBar;
}
//constr
Bar::Bar(){
//... initialize members
}
//private library init
Bar::init(){ ...}
//public API init
bool lib_init(){
getBarObj().init();
}
Bar objのインスタンス化が定義されていない可能性があるケース1とは対照的に、ケース3では「要求に応じて」使用されます。ただし、ケース3はケース1と同じ動作を提供します。
そして私の質問は...誰かがここで何が起こっているのか説明できますか?すべてがVC2008リリースモードで構築されています(このプロジェクトのデバッグモードのオプションはありません)