生命周期
生命周期应是rust语言最与众不同的概念。
- rust的每个引用都有自己的生命周期。
- 生命周期:引用保持有效的作用域。
- 大多数情况:生命周期是隐式的、可被推断的。
- 当引用的生命周期可能以不同的方式相互关联时,需要手动标注生命周期。
生命周期存在的目的:避免悬垂引用(dangling reference)
如:
fn main() {
let r;
{
let x = 5;
r = &x; // 编译报错
}
println!("{}", r);
}
这里编译报错,因为当最后一行使用r的时候的,r所指向的x已经释放了,生命周期已结束,再继续使用r将可能访问到已释放的内存的错误。rust采用了借用检查器来检查内存问题。
借用检查器
rust编译器的借用检查器:比较作用域来判断所有的借用是否合法。