在讲引用之前先介绍一下所有权。
Rust中每一个值都有且仅有一个所有者,当其所有者离开作用域后,这个值就被丢弃。
let s1 = String::from("hello"); let s2 = s1;
上述代码中s1将无效,因为改变量是存储在堆上的。
let mut s = String::from("hello"); let s1 = &mut s; let s2 = &mut s;
该代码会编译报错。
因为在特定作用域中的特定数据有且只有一个可变引用。
也不能在拥有不可变引用的同时拥有可变引用。
let mut str1 = String::from("hello"); let borr_str1 = &mut str1;
上述代码中str1将不能再使用,因为str1也属于可变引用。