Coroutines, Self-Referential Structs, and Pinning 232 Figure 9. 2-Move, clone, and copy A move will in many ways be like a deep copy of everything in our struct that's located on the stack. This is problematic when you have a pointer that points to self, like we have with self-referential structs, since self will start at a new memory address after the move but the pointer to self won't be adjusted to reflect that change. Most of the time, when programming Rust, you probably won't think a lot about moves since it's part of the language you never explicitly use, but it's important to know what it is and what it does. Now that we've got a good understanding of what the problem is, let's take a closer look at how Rust solves this by using its type system to prevent us from moving structs that rely on a stable place in memory to function correctly. 