[GC] Object variables collected prematurely

Hi Everyone,

Problem - Objects created in actor constructor and stored in TMap are getting variables collected (set to random) after start of the game.

In ATestActor I create 500 UTestObjects. Each of them has variable id=0 defined in UTestObject header. In “Begin Play” I go through whole map printing out ids of each UTestObject and getting values like -842150451 etc.

If I do the printing in constructor, it works and outputs 0 for each object.

Garbage collector should not collect those since I have pointers to them stored.

I am sure I am missing something trivial,

Thanks for any help,




ATestActor class

	for (int i = 0; i < 500; i++)
		FName RendererName = FName(*("ObjectName" + FString::FromInt(i)));
		map.Add(i, NewObject<UTestObject>(this, RendererName));

void ATestActor::BeginPlay()

	for (int i = 0; i < 500; i++)
		int id = (*(map.Find(i)))->id;
		UE_LOG(LogTemp, Warning, TEXT("id %d"), id);

//Simple TestObject header

class BUILDTEST_API UTestObject : public UObject

	int id = 0;

Answer - TMap and other containers has to be declared with UPROPERTY() in the header file.
More info here A new, community-hosted Unreal Engine Wiki - Announcements - Unreal Engine Forums