Почему в Rust нужны явные времена жизни?

Я читалглава жизни книги Rust, и я наткнулся на этот пример для именованного / явного времени жизни:

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;).

В каких случаях требуется явное время жизни для предотвращения ошибок использования после освобождения (или какого-либо другого класса?)?

Ответы на вопрос(9)

Ваш ответ на вопрос