PLEASE explain the ghost UObject constructor calls

Why does a UObject that I’ve derived and explicitly only made one instance of actually get multiple constructor / destructor calls? I can easily see them because of added UE_LOG calls. I’m guessing it has something to do with engine’s runtime reflection system and needs a “test” / internal version of said object?

In any case, this has ramifications for what should and shouldn’t be done in functions like constructors and PostInitProperties. Is there some code that I can use inside said functions to check whether a particular instance is a ghost / test/ internal variant or one of the explicit ones used at steady-state runtime?

Just thought to use GetName() in UE_LOG and sure enough one of the names is prefixed with “Default__”. So I guess UE needs to keep default copies around for its own internal use.

Is using the object name the only or best way to distinguish between “my” objects and internal ones?

There are boolean flags if I can recall correctly that allow you to distinguish between them.
if( !HasAnyFlags( RF_ClassDefaultObject | RF_ArchetypeObject ) )
// initialize services here

Thank you BaderThanBad! Makes sense too.