什么是所有權(quán)?(Ownership)
Rust 不使用 GC(垃圾回收器)管理內(nèi)存,而是使用所有權(quán)機(jī)制進(jìn)行管理。和 GC 要啟動專門的工作線程并且會在運行時中斷程序相比,所有權(quán)機(jī)制是非常輕量級的。
- 每一個值都有一個對應(yīng)的被稱為所有者的變量
- 每個值在同一時刻只能存在一個所有者
- 當(dāng)所有者超出作用域后這個值就會被刪除
當(dāng)下面的代碼運行到右花括號處時,Rust 會自動調(diào)用一個名叫 drop 的函數(shù)來釋放變量 s 占用的內(nèi)存
{
let s = String::from("hello");
}
如果把內(nèi)存空間比喻成一間房子,那么要進(jìn)入這間房子就必須拿到它對應(yīng)的那把鑰匙,這把鑰匙同一時刻只屬于一個人。
當(dāng) s1 被賦值給 s2 時將發(fā)生移動而不是淺拷貝,也就是說 s1 將變得無效而 s2 獲得所有權(quán)
let s1 = String::from("hello");
let s2 = s1;
函數(shù)調(diào)用也會發(fā)生所有權(quán)移動
fn main() {
let s = String::from("hello");
takes_ownership(s);
// s 在此處已經(jīng)無效
}
fn takes_ownership(some_string: String) {
println!("{}", some_string);
}