VC和GCC静态变量析构顺序不同
(金庆的专栏)
静态变量析构顺序正常情况下是构造的反序。
但是VC对DLL中的静态变量好像是需等待DLL卸载时再析构,
表现为主程序中的静态变量先析构,DLL中的静态变量后析构。
VC测试版本为VC2010Express.
例如:
class A {};
static A s_a;
int main()
{
extern B & getB(); // defined in b.dll
B & rb = getB();
return 0;
}
b.dll中有个静态变量s_b:
class B;
B & getB()
{
static B s_b;
return s_b;
}
Vc的执行顺序为:
A()
B()
~A()
~B()
而Gcc的执行顺序为:
A()
B()
~B()
A()