更多關於參考
參考在 Rust 中非常重要。Rust 使用參考來確保所有的記憶體訪問是安全的。我們知道,我們用 &
來建立參考:
fn main() { let country = String::from("Austria"); let ref_one = &country; let ref_two = &country; println!("{}", ref_one); }
這樣會印出 Austria
。
在程式碼中,country
是 String
。我們接著建立了兩個 country
的參考。它們的型別是 &String
,你會講說這是 "String 的參考"。我們可以建立三個參考或者一百個對 country
的參考,這都沒有問題。
但這裡有問題:
fn return_str() -> &str { let country = String::from("Austria"); let country_ref = &country; country_ref // ⚠️ } fn main() { let country = return_str(); }
return_str()
函式建立了 String,它接著建立了對這個 String 的參考。然後它試圖回傳參考。但是 country
這個 String 只活在函式里面,然後它就死了。一旦變數消失了,電腦就會清理記憶體,並將其用於其他用途。所以在函式結束後,country_ref
參考到的是已經消失的記憶體,這是不對的。Rust 防止我們在這裡犯記憶體的錯誤。
這就是我們前面講到的 "擁有所有權" 型別的重要部分。因為你擁有 String
,你可以把它傳給別人。但是如果 &String
的 String
死了,那麼 &String
就會死掉,所以你不能把它的 "所有權" 傳給別人。