MFC-如何保证一个全局对象第一个构造

MFC-如何保证一个全局对象第一个构造

晚风撩人 发布于 2016-12-24 字数 91 浏览 1146 回复 3

定义了一个全局对象,如何保证他是第一个构造呢?我用的是MFC,要保证他保证构造早于theApp

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-10-17 3 楼

如果这个全局变量和theApp是在同一个文件中,C++标准规定了同一编译单元中全局对象的构造顺序,在同一个cpp 文件中, A 的对象定义在 B 的对象定义之前,那么 C++ 标准保证 A 的对
象构造一定完成在 B 的对象之前。

但是如果是在不同的文件之中,C++标准就没有规定了,也就不好说了,或者还跟编译和链接的顺序有关系。有人测试了gcc,揭示C++中全局类变量的构造与析构顺序

晚风撩人 2017-05-15 2 楼

把全局变量声明在theApp对象声明之前,可以确保早于theApp初始化

这是因为在C++中全局对象、变量的初始化是独立的,全局对象、变量的构造函数调用顺序是跟声明有一定关系的,即在同一个文件中先声明的先调用。对于不同文件中的全局对象、变量,它们的构造函数调用顺序是未定义的,取决于具体的编译器。

你也可以用

xxx get_obj()
{
static xxx g_obj = xxx
return g_obj ;
}

这种方式来控制初始化顺序。

浮生未歇 2017-04-08 1 楼

全局变量本来就先于theApp构造,可以创建一个MFC工程测试下:

int b=5;
CGlableTestApp::CGlableTestApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
int a=0;
if (b==5)
{
int c=0;
}
}

断点设置在"int c=0;"这行,若断到说明全局变量先于theApp构造。