頭條地址:https://www.ixigua.com/i677586170644791348...
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); // | |
} //--------------------------------+--------------+
說明:資料比引用的生命週期更長,則是有效的引用
本作品採用《CC 協議》,轉載必須註明作者和本文連結