调整static变量初始化顺序的一个办法
2016-09-11 00:26
567 查看
// wrap the LaunchDir variable in a function to work around static/global initialization order static FString& GetWrappedLaunchDir() { static FString LaunchDir; return LaunchDir; }
在ue4中看到这么一段代码,注释有点意思
不同cpp文件里的全局static变量初始化顺序是不可控的
FString显然会依赖很多内存分配、字符串处理相关的更基础功能
如果把它放在文件域里,初始化顺序有可能会在那些模块的static变量之前
因此把它改到函数内部,它会在函数第一次被调用时才初始化,避免了这个顺序问题
但是这样一来,导致要对LaunchDir进行赋值时,代码就有点古怪了:
GetWrappedLaunchDir() = XXXX
等号左侧出现一个函数调用。
相关文章推荐
- 全局变量相互依赖和初始化顺序的解决办法
- Java的static修饰变量,方法,代码块的初始化顺序
- 全局变量相互依赖和初始化顺序的解决办法
- Java中static变量的初始化顺序
- Java static变量初始化顺序引发的bug
- C++函数中的static变量初始化及析构顺序
- 构造函数初始化、static代码块初始化、成员变量初始化、以及在子父类中混合的执行顺序实例
- java中static变量与非static变量初始化顺序
- 初始化一个static的Map变量
- static 变量初始化顺序的问题和解决方案
- 一个可遇不可求的 bug 全局变量初始化顺序问题 哈哈
- Java中的static变量、方法、代码块初始化执行顺序
- static 变量和static 构造函数 以及对象初始化顺序
- 一个类的static变量在其所有实例化对象上是共享的
- Static和Final修饰类属性变量及初始化(转载)
- 控制全局变量初始化顺序 && #pragma详解
- 【提醒】类的static变量应该在类外进行初始化
- 关于static的初始化顺序
- static的初始化顺序
- C#类成员变量初始化与构造函数执行的顺序