借用与引用 #
- 创建一个引用的行为称为 借用
- 允许使用值但不获取其所有权
引用规则 #
- 在任意给定时间,要么 只能有一个可变引用,要么 只能有多个不可变引用。
- 引用必须总是有效的。
可变引用 #
允许修改一个借用的值,这就是可变引用(&mut)。
fn main() {
let mut s = String::from("hello");
change(&mut s);
}
fn change(some_string: &mut String) {
some_string.push_str(", world");
}
悬垂引用(Dangling References) #
fn main() {
let reference_to_nothing = dangle();
}
fn dangle() -> &String {
// dangle 返回一个字符串的引用
let s = String::from("hello"); // s 是一个新字符串
&s // 返回字符串 s 的引用
} // 这里 s 离开作用域并被丢弃。其内存被释放。
// 危险!