Rust 所有权

什么是所有权?(Ownership)

Rust 不使用 GC(垃圾回收器)管理内存,而是使用所有权机制进行管理。和 GC 要启动专门的工作线程并且会在运行时中断程序相比,所有权机制是非常轻量级的。

  • 每一个值都有一个对应的被称为所有者的变量
  • 每个值在同一时刻只能存在一个所有者
  • 当所有者超出作用域后这个值就会被删除

当下面的代码运行到右花括号处时,Rust 会自动调用一个名叫 drop 的函数来释放变量 s 占用的内存

{
    let s = String::from("hello"); 
}                            

如果把内存空间比喻成一间房子,那么要进入这间房子就必须拿到它对应的那把钥匙,这把钥匙同一时刻只属于一个人。

当 s1 被赋值给 s2 时将发生移动而不是浅拷贝,也就是说 s1 将变得无效而 s2 获得所有权

let s1 = String::from("hello");
let s2 = s1;

函数调用也会发生所有权移动

fn main() {
    let s = String::from("hello");

    takes_ownership(s); 
    // s 在此处已经无效
}

fn takes_ownership(some_string: String) {
    println!("{}", some_string);
}

推荐阅读更多精彩内容