Best way to handle pointers?

The camera pointers in this tutorial are not deleted. Is it for the sake of simplicity?

Would you consider TSharedPtr an overkill for this usecase (we just need to delete them in the Pawn’s destructor)?

UObjects are garbage collected and shouldn’t be explicitly deleted, see Unreal Object Handling | Unreal Engine Documentation

You should never use TSharedPtr with UObjects. TSharedPtr, TWeakPtr, TUniquePtr are for use with regular objects (not derived from UObject) . AFAIK TWeakObjectPtr is the only smart pointer you’d use with a UObject.

Even though this is mentioned in the documentation you linked, I just wanted to add here, that it is essential, that all member variables of UObject-pointers are declared as UPROPERTY, otherwise the garbage collector doesn’t know of them, and will delete them, even though the variable might still be in use, most likely causing a segfault, the next time the pointer is used (causing a nasty crash, seemingly randomly after ~60 seconds when the GC runs for the first time).