还想追问一下:
由于我自己实现的staticContainerType * GetInstance()函数是普通的判断实现:if( l_instance == 0) { l_instance = new ContainerType; }return l_instance ;对于static ContainerType * l_instance ;该静态成员需要初始化,当我在外面把其初始化为0的时候,程序一切正常;当我随便初始化一个地址,比如0X1231时,报错;调试发现在第一次调用GetInstance()时该成员的值被赋值成了0X1231,就是说该成员的初始化变成了在其他全局变量的最前面(我在该初始化语句的上面也定义了全局变量的)。但是我把初始化语句改成:ContainerType * GlobalContainer::l_instance =new ContainerType;之后,问题来了,调试发现该初始化又不是最先调用的了,也就是说在程序运行中获取该容器对象时,里面理论上应该保存的类对象数据都没了!该容器变成了一个空容器!
1 ContainerType * GlobalContainer::l_instance =0;//一切正常 初始化动作并没有把该成员变回0
2.ContainerType * GlobalContainer::l_instance =0x1231;//崩溃 因为在GetInstance中该变量不满足条件语句,导致直接操作了非法地址;
3.ContainerType * GlobalContainer::l_instance =new ContainerType;//出现问题,运行中发现该变量中不再存在元素。。
(1,2点应该证明了容器指针的初始化动作跳到了所有注册对象构造的前面,而3点却又说明初始化动作又比其他对象晚了!)
凌乱了。。。。这个到底是神马情况??