Prevent memory violation when calling overridden functions from derived classes.

the built in state machines are implemented for animations (state machines), and “AI” (behavior trees) with a small capability for “fuzzy logic” if need be and they can be designated as the “controller” for a Pawn. you can look a bit here

and

you would use pure C++ for things that you don’t need: data-saving, Garbage collection (you are responsible to allocate and delete memory), Error handling, Type checking/validation, Editor functionality,
or for things where you need straight C and ASM. there are also times it might be useful if you need to do thing that might depend on the standard library a bunch, or for example if you wanted to do your own delegate generation, or threading (these are systems that Unreal has built in)

you can have a pure C++ data object inside a UObject, but you are responsible for creating, maintaining, and deleting it, but you cannot expose it to the editor.

1 Like