得到具有以下原因不明的行爲:非靜態全局對象VS全局指針到動態對象
情況1:
a.cpp
編譯爲一個.dll庫和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.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.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();
}
與之相對第1種情況,其中酒吧的obj實例可能是不確定的主要使用() ,在情況3中「根據請求」使用它。然而,案例3提供了與案例1相同的行爲。
而我的問題是......任何人都可以解釋這裏發生了什麼? 一切是建立與VC2008釋放模式(對調試模式這個凸出別無選擇)
什麼「不明原因的行爲」你看見了什麼? – Mat
在Bar constr中,我有一個初始化循環。它的一個成員是一個固定大小的struct Foo類型的數組,在「a.h」中定義。例如,不是迭代SIZE_OF_ARRAY = 8次,循環迭代爲50K次... – BegemoD
請將其編輯到您的問題中,_including相關的code_ - 您的實際問題沒有任何描述(已經很長)的文章。在a.h中的 – Mat