更多關於參考

YouTube 上觀看本章內容

參考在 Rust 中非常重要。Rust 使用參考來確保所有的記憶體訪問是安全的。我們知道,我們用 & 來建立參考:

fn main() {
    let country = String::from("Austria");
    let ref_one = &country;
    let ref_two = &country;

    println!("{}", ref_one);
}

這樣會印出 Austria

在程式碼中,countryString。我們接著建立了兩個 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,你可以把它傳給別人。但是如果 &StringString 死了,那麼 &String 就會死掉,所以你不能把它的 "所有權" 傳給別人。