生命周期
生命周期就是“变量可以活多久”,如果变量活不到那时候,那就不能在那时候被使用(编译无法通过)。
它和所有权是完全不同的东西,但我一开始还是搞混了两个概念,因为这两者是一同使用的(大部分的时候)。
变量何时死?
这是一个非常重要的点,教程在介绍时候一般不会突出重点(我恨死这种学习资料了)。
这一点是我悟了好几个小时才抓住的要点。
想知道变量存活了多久,就得知道:变量到底啥时候被编译器杀死(释放)?
死亡案例一:自然死亡(作用域结束)
略
编码惨状一:悬垂引用
rust
{
let r;
{
let x = 5;
r = &x; // ⚠️ 将 x 的引用赋给 r
} // ⚠️ x 被释放
println!("r: {}", r); // ⚠️ r 还存在,但指向的是已经释放的 x
}悬垂引用:引用已经被销毁的数据,被借用方的生命范围无法覆盖借用方的生命范围,rust 不允许这种情况。