Some confusion of UObject*, UPROPERTY decorator, and UWeakObjectPtr

Weak Object Pointer are simply pointers that the Engine is allowed to delete whenever it wants if memory is getting low. You then have to “lock down the reference” before using it. In Unreal you Pin the weak object and check if you successfully got it pinned. If not you have to recreate the object again and then Pin it. All explained here: Weak Pointers | Unreal Engine Documentation.