我正在读“生锈的lifetimes chapter”这本书,我偶然发现了这个例子,关于一个命名的/显式的生命周期:
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
我很清楚,编译器防止的错误是在释放后使用分配给x
的引用:内部作用域完成后,f
和&f.x
都无效,不应该分配给x
。
我的问题是,在不使用显式'a
生存期的情况下,例如通过推断对更大范围(x = &f.x;
)的非法引用赋值,可以很容易地分析出问题。
在哪些情况下,确实需要显式的生命周期来防止在释放后使用(或其他类?)错误?
https://stackoverflow.com/questions/31609137
复制相似问题