调整static变量初始化顺序的一个办法
Posted 冷欺花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调整static变量初始化顺序的一个办法相关的知识,希望对你有一定的参考价值。
// 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
等号左侧出现一个函数调用。
以上是关于调整static变量初始化顺序的一个办法的主要内容,如果未能解决你的问题,请参考以下文章
final,static静态和非静态,初始化和代码块的区别父类和子类中都有static变量时的初始化顺序重写equals() instanceof强制转换