Why do I need to use pointers for non-primitives (BEGINNER)

Is this due to their heap-allocated nature? Why do non-primitives require you to clone?