全局對象和atexit對破壞之間的順序我不知道,可以用C確保全局對象的破壞和atexit
之間爲了++在C++
我有一個全局對象和註冊atexit
功能象下面這樣:
static MyClass g_class;
void onExit()
{
// do some destruction
}
int main()
{
atexit(onExit);
return 0;
}
我發現在Visual Studio 2012和gcc4.7.2中的MyClass::~MyClass()
之前調用onExit()
。我確定總是在全局對象(如g_class
)銷燬之前調用onExit
?
我想知道全局對象註冊順序和atexit
註冊順序使用相同的順序表。 或者全局對象順序和atexit
命令之間沒有關係?
修改:抱歉,我寫了一個錯誤。整理示例代碼時我很困惑。在〜MyClass()之前調用onExit()
。
我懷疑訂單不是100%肯定要定義的。你爲什麼在乎? –
在'MyClass'之前創建另一個全局對象,並在其構造函數中調用'atexit(onExit)'來檢查。 – lapk
想要控制對象的生命週期,使用動態的對象。 – PiotrNycz