什么是所有权?(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);
}
网友评论