我正在閱讀Rust書的生命周章,我在這個(gè)例子中看到了命名/顯式生命周期:struct Foo<'a> { x: &'a i32,}fn main() { let x; // -+ x goes into scope // | { // | let y = &5; // ---+ y goes into scope let f = Foo { x: y }; // ---+ f goes into scope x = &f.x; // | | error here } // ---+ f and y go out of scope // | println!("{}", x); // |} // -+ x goes out of scope我很清楚,編譯器阻止的錯(cuò)誤是在內(nèi)部作用域完成后分配給的引用的釋放x后使用,f因此&f.x變?yōu)闊o(wú)效,并且不應(yīng)該被分配給x。我的問(wèn)題是,在不使用顯式 'a生命周期的情況下,可以很容易地分析問(wèn)題,例如通過(guò)推斷對(duì)更寬范圍的引用的非法分配(x = &f.x;)。在哪些情況下實(shí)際需要明確的生命周期來(lái)防止使用后免費(fèi)(或其他一些類?)錯(cuò)誤?
為什么Rust需要明確的生命周期?
慕工程0101907
2019-09-20 14:58:41