Consider some smart pointers we've already seen like
Vec<T> is a smart pointer that just owns some memory region of bytes. The Rust compiler has no idea what
exists in these bytes. The smart pointer interprets what it means to grab items from the region of memory it manages,
keeps track of where data structures within those bytes begin and end, and then finally dereferences a raw pointer
into data structures into a nice clean ergonomic interface for us to use (e.g.
String keeps track of a memory region of bytes, and programmatically restricts content written to it to always
utf-8 and helps dereference that memory region into a type
Both these datastructures use unsafe dereferencing of raw pointers to do their job.