调整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强制转换

static关键字解析

Java对象实例化顺序

类的初始化

Java类成员初始化顺序

面向对象 static