Move semantics transfers ownership of a value into another binding or function. After the transfer, the original binding can no longer access that value. section 2.3
Passing an Artwork value to admire_art moves it from main into the function. Rust then drops values when they leave scope, so lifetime graphs show where each binding remains usable. section 2.3
Using a moved value
let art1 = Artwork { name: "The Ordeal of Owain".to_string() }; admire_art(art1); admire_art(art1); // error: use of moved value: art1 section 2.1
Figure 2.4 The lifetime graph in listing 2.5
Inspect the lifetime graph for the failing double-admiration example to see where art1 becomes unreachable. section 2.3
Recognize move behavior through these patterns:
- Move a value into a function and use it there. section 2.1
- Keep separate values usable by moving each into a different call site. section 2.3
- Treat a later use of the original binding as invalid unless the value remains available through another design. section 2.1




