所有权原则

  1. Rust 中每一个值都被一个变量所拥有,该变量被称为值的所有者;
  2. 一个值同时只能被一个变量所拥有,或者说一个值只有有一个所有者;
  3. 当所有者(变量)离开作用域范围时,这个值被丢弃。
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);

上述代码中,首先在堆上开辟了一块空间,存放“hello“。然后将指向”hello“的指针、字符串长度、字符串容量三者,作为一个复杂类型,赋予 s1。

当执行let s2 = s1;后,由于一个值只能被一个变量拥有,此时s1为无效引用,当执行第三行的println语句时会报错。

Q: 为什么要这么设计? A: 避免二次释放问题。