¿Por qué se necesitan vidas explícitas en Rust?
Estaba leyendo elcapítulo de vidas del libro Rust, y me encontré con este ejemplo para una vida nombrada / explícita:
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
Para mí es bastante claro que el error que el compilador previene es ellibre de uso de la referencia asignada ax
: después de que se hace el alcance interno,f
y por lo tanto&f.x
dejar de ser válido y no debería haber sido asignado ax
.
Mi problema es que el problema podría haberse analizado fácilmentesin utilizando laexplícito 'a
de por vida, por ejemplo, al inferir una asignación ilegal de una referencia a un alcance más amplio (x = &f.x;
)
¿En qué casos se necesitan vidas explícitas para evitar errores de uso libre (o alguna otra clase)?