Its hard to tell what you are doing without seeing code. But the question has 2 parts. Reflection, and instantiation:
UPROPERTY() means its reflected. Which is required to serialize. Which is required to use in BP’s, and save, load from disk, or serialize from a umap.
In order to create the object, it must be instantiated, then it can be serialized into.
IE: the object pointed to MUST exist before knowing what it contains. You MUST create the object EVERY time the class gets instantiated.
CreateDefaultSubobject<UMyObject> () needs to be called from the constructor.
UPROPERTY(Transient) //<-- Transient means this WILL NOT get SAVED or LOADED.
uint64 NPC_Class;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "SOP")
USOPScript* SopScript; //<--- this gets Default Constructed, and serialized to disk, or into levels.
UPROPERTY(Transient)
USOPState* SopState; //<--- this holds state information, and does not get serialized to disk or into levels. But does get serialized for access by BP's.
And the code?