Posted on 2010-05-11 22:55
魔のkyo 阅读(471)
评论(0) 编辑 收藏 引用
全局变量初始化依赖/全局对象构造依赖 在C++中一直是个棘手的问题,至于产生的原因我不再赘述了,如果你搜索到此文章看来你已经遇到了这个问题。
解决方法:
1.将有依赖关系的全局变量的定义移动到同一个CPP文件中,引用的文件中进行extern,标准规定了同一个文件中的初始化顺序默认是由上至下的。
2.将全局变量改成静态变量(函数中的)通过一个函数返回,标准规定了函数中的静态变量是在第一次执行到的时候进行初始化。
3.在Microsoft的编译器上可以通过#pragma init_seg(*) 来指定全局变量所属的数据段,段初始化的顺序是compiler,lib,user,程序员甚至可以指定自己的段并且自己完成全局变量的初始化和终结化(只要你愿意甚至可以让全局变量初始化放在main函数里),详情见msdn。
BTW:自己写代码的时候应该避免使用全局变量,尤其是全局对象,此外,类静态成员和全局变量一样不可控,可以使用静态方法将静态成员装在函数内。