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

发布于 2016-12-24 11:54:58 字数 54 浏览 1247 评论 3

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(3

虐人心 2017-10-17 18:38:13

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

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

晚风撩人 2017-05-15 05:05:23

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

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

你也可以用

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

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

浮生未歇 2017-04-08 09:08:13

全局变量本来就先于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构造。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文