Why use keyword "class" in TSubobjectPtr, TSubclassOf and in function parameters?

uh?

It makes no sense using TSharedPtr/TWeakPtr instead of the old TSubOjbtPtr, since the UPROPERTY are already “reference counted”.

Just use naked pointers.