MFC-如何保证一个全局对象第一个构造
定义了一个全局对象,如何保证他是第一个构造呢?我用的是MFC,要保证他保证构造早于theApp
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
定义了一个全局对象,如何保证他是第一个构造呢?我用的是MFC,要保证他保证构造早于theApp
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
如果这个全局变量和theApp是在同一个文件中,C++标准规定了同一编译单元中全局对象的构造顺序,在同一个cpp 文件中, A 的对象定义在 B 的对象定义之前,那么 C++ 标准保证 A 的对
象构造一定完成在 B 的对象之前。
但是如果是在不同的文件之中,C++标准就没有规定了,也就不好说了,或者还跟编译和链接的顺序有关系。有人测试了gcc,揭示C++中全局类变量的构造与析构顺序
把全局变量声明在theApp对象声明之前,可以确保早于theApp初始化
这是因为在C++中全局对象、变量的初始化是独立的,全局对象、变量的构造函数调用顺序是跟声明有一定关系的,即在同一个文件中先声明的先调用。对于不同文件中的全局对象、变量,它们的构造函数调用顺序是未定义的,取决于具体的编译器。
你也可以用
xxx get_obj()
{
static xxx g_obj = xxx
return g_obj ;
}
这种方式来控制初始化顺序。
全局变量本来就先于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构造。