Por que as vidas explícitas são necessárias no Rust?

Eu estava lendo ocapítulo das vidas do livro Rust e me deparei com este exemplo por um tempo de vida nomeado / explícito:

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

É bastante claro para mim que o erro que está sendo impedido pelo compilador é ousar após livre da referência atribuída ax: depois que o escopo interno for concluído,f e portanto&f.x tornar-se inválido e não deveria ter sido atribuído ax.

Meu problema é que o problema poderia ter sido facilmente analisadosem usando oexplícito 'a vida útil, por exemplo, deduzindo uma atribuição ilegal de uma referência a um escopo mais amplo (x = &f.x;)

Em quais casos as vidas explícitas são realmente necessárias para evitar erros de uso após liberação (ou de alguma outra classe?)?

questionAnswers(9)

yourAnswerToTheQuestion