最小的例子是这样的(Playground):
#[derive(Debug)]
struct Node {
id: usize,
}
fn main() {
let mut node = Node { id: 0 };
let mut lastnode = &mut node;
let mut last = lastnode; // move
(*last).id = 1;
println!("{:?}", last);
//println!("{:?}", lastnode);
let mut node2 = Node { id: 2 };
lastnode = &mut node2;
last = lastnode; // doesn't move to "last"
println!("{:p}", last); // "last" and "lastnode" point to the same address
println!("{:p}", lastnode);
}
Run Code Online (Sandbox Code Playgroud)
为什么第一个会last = …