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

码侬 2011-12-10 03:11:13
加精
定义了一个全局对象,如何保证他是第一个构造呢?

放在theApp上面可以保证构造早于theApp,但是如果有很多文件呢,怎么保证要比其他文件中的全局变量构造早呢

有人说和编译顺序有关,后编译的文件先构造,但是在实验中发现又不是这个样子,
请问,多个文件中的全局对象,构造顺序是如何的?
...全文
1806 116 打赏 收藏 转发到动态 举报
写回复
用AI写文章
116 条回复
切换为时间正序
请发表友善的回复…
发表回复
tauke_wang 2011-12-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fight_in_dl 的回复:]

对于不同文件中的全局对象、变量,它们的构造函数调用顺序是未定义的,取决于具体的编译器。
最好不要写出和编译顺序相关的程序来。

强烈建议楼主绕开这个问题,寻找代替方案。举例如下:
int a=5;
int b=a;
如果a和b定义在同一个文件里,那没什么问题,结果b等于5.
如果a和b定义在不同文件里,当遇到b=a时不能保证a先初始化,解决这种问题的方法是不直接使用全……
[/Quote]
这样就可以
码侬 2011-12-17
  • 打赏
  • 举报
回复
[Quote=引用 107 楼 danjiewu 的回复:]

lz这个命题是不成立的,如果有2个这样的全局对象会发生什么?
只要保证在被访问之前构造就可以了
[/Quote]

当然只有一个这样的对象了
wawaga 2011-12-16
  • 打赏
  • 举报
回复
好办法呀 呵呵
q8810783 2011-12-15
  • 打赏
  • 举报
回复
请自行编写mak,或是显示编写汇编段。
ab2012334 2011-12-15
  • 打赏
  • 举报
回复
这外东西好复杂哦
dong19931014 2011-12-15
  • 打赏
  • 举报
回复
hen hao , xiwang lou zhu hao hao xuexi
glyc 2011-12-14
  • 打赏
  • 举报
回复
自己写makefile控制link文件的顺序。
双杯献酒 2011-12-14
  • 打赏
  • 举报
回复
不论你用哪种方法,只要 "其他全局变量也这样", 就无法保证你的变量第一个构造.
上岸の鱼 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gameslq 的回复:]
引用 4 楼 gao_zilai 的回复:

引用 1 楼 oyljerry 的回复:

全局对象就够早了,为什么要特别比其他早.可以所有全局对象都构建了,然后在InitInstance中坐各个对象初始化工作,这样就可以控制顺序了

多谢 oyljerry 能回复,有特殊的应用场合,并且不算不合理。

比如有一个可以进程通信的日志记录类,他用来记录一个程序的所有启动日志(用于调试)……
[/Quote]

最头疼的就是这种自作聪明的回复,答非所问,真是无语
csdn一绝 2011-12-14
  • 打赏
  • 举报
回复
这个问题的探讨 哎。。就貌似 一群孕妇要生小孩,现在只有一个接生婆,接生婆不知从那个孕妇下手。
danjiewu 2011-12-14
  • 打赏
  • 举报
回复
lz这个命题是不成立的,如果有2个这样的全局对象会发生什么?
只要保证在被访问之前构造就可以了
benxiaohaier 2011-12-13
  • 打赏
  • 举报
回复
有道理
wxWidgets911 2011-12-13
  • 打赏
  • 举报
回复
不懂的路过帮顶。。
loorey 2011-12-13
  • 打赏
  • 举报
回复
有道理
zhongguoren666 2011-12-13
  • 打赏
  • 举报
回复
回复的真不少,本人建议:
1、1楼说的已经非常对,这样可以控制的;
2、个人认为对于全局的东西,在面向对象的思想中,还是把全局变量封装在一个类里面,而全局变量定义为一个静态变量;
这样,你想怎么控制就怎么控制。最好设计类的初始化静态方法。
风vs雷 2011-12-13
  • 打赏
  • 举报
回复
顶下,虽然不太明白。
smwhotjay 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 89 楼 lmc158 的回复:]
利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法。
先来个简单的实例热热身吧。
1、无参数的方法调用
asp.net code:
using System.Web.Script.Services;
[WebMethod]
public static string SayHello()
{
return "Hello Ajax!";
}
注意:1.方法……
[/Quote]

搞什么飞机?! 搞web js的也来了. jquery
djog 2011-12-13
  • 打赏
  • 举报
回复
这个问题到是应该好好学学..收益了..
v_table 2011-12-13
  • 打赏
  • 举报
回复
不能保证,除非自己编写编译器
fe 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fight_in_dl 的回复:]

对于不同文件中的全局对象、变量,它们的构造函数调用顺序是未定义的,取决于具体的编译器。
最好不要写出和编译顺序相关的程序来。

强烈建议楼主绕开这个问题,寻找代替方案。举例如下:
int a=5;
int b=a;
如果a和b定义在同一个文件里,那没什么问题,结果b等于5.
如果a和b定义在不同文件里,当遇到b=a时不能保证a先初始化,解决这种问题的方法是不直接使用全……
[/Quote]
深切学习了!
加载更多回复(59)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧