值为什么会移动
一个 String 不只是栈上的三个数字,它还拥有堆上的字符缓冲区。赋值时如果复制这组所有权信息,两个变量就可能释放同一块内存。
rust
let first = String::from("hello");
let second = first;
println!("{second}");Rust 选择让 first 在赋值后失效。这个过程叫移动,它不复制堆上的字符,也不需要垃圾回收器。
所有权不是需要死记的限制集合,而是一套让资源生命周期可以被编译器证明的规则。
Stringfirstlet first = String::from("hello");
let second = first;
println!("{second}");