https://blog.csdn.net/qq_47406941/article/details/113614061
ConstructorHelpers::FObjectFinder” vs. “static ConstructorHelpers::FObjectFinder”
举例:
class Base
{
public:
Base()
{
cout << "hello" << endl;
}
};
void func()
{
static Base b;
cout << &b << endl;
}
int main()
{
func(); //第一次输出
func(); //第二次输出,两次输出的地址是相同的,也就是相同的对象b
return 0;
}
总结:函数中的static修饰的遍历,函数调用结束之后,并没有真的销毁,而是还在内存里,下次调用依然是上次的赋值。从而保证了不重复加载,不重复实例化,这个我们可以测一下。
也就是ue中经常看到的:
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = false;
myMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyStaticMesh"));
myMesh->SetupAttachment(RootComponent);
static ConstructorHelpers::FObjectFinder<UStaticMesh> CylinderAsset(TEXT("/Game/StarterContent/Props/SM_Lamp_Ceiling")); //static修饰的变量
if (CylinderAsset.Succeeded())
{
myMesh->SetStaticMesh(CylinderAsset.Object);
myMesh->SetWorldLocation(FVector(900.0f, 1110.0f, 92.0f));
myMesh->SetWorldScale3D(FVector(1.f));
}
}