视频地址
头条地址:https://www.ixigua.com/i6775861706447913485
B站地址:https://www.bilibili.com/video/av81202308/
讲解内容
1、Rust中每一个引用都有其生命周期,也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的,正如大部分时候类型可以推断一样。
2、生命周期的主要目标是避免悬垂引用。
错误例子:
{
let r;
{
let x = 5;
r = &x;
}
println!("r = {}", r); //r为悬垂引用
}
3、Rust编译器使用借用检查器来检查生命周期是否有效。
错误例子:
{
let r; //-------------------------------------+-------'a
{ // |
let x = 5; //--- +---'b |
r = &x; // | |
} //-----------------+ |
println!("r = {}", r); //r为悬垂引用 |
} //---------------------------------------------+
说明:r的生命周期为‘a,x的生命周期为’b,'b < 'a,被引用的对象比它的引用者存在的时间还短,那么必然报错。
正确例子:
{
let x = 5; //----------------------------------+-----------'b
let r = &x; //----------------+---'a |
println!("r = {}", r); // | |
} //--------------------------------+--------------+
说明:数据比引用的生命周期更长,则是有效的引用