FString in TArray of pointers changes its value to garbage

@MagForceSeven
If your GameInstance array is the only persistent reference to those objects you must have a UPROPERTY macro before it or else those objects will be garbage collected.

That’s not true.
You just need to specify outer when creating the object and you don’t need any macros.

UConstructionBuilding* coalPowerStation = NewObject<UConstructionBuilding>(this); 

Now, coalPowerStation is reachable from UGameInstance, so as long GameInstance exists, coalPowerPlant instance exists too.