首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在Rust中需要显式生命周期?

为什么在Rust中需要显式生命周期?
EN

Stack Overflow用户
提问于 2015-07-24 19:15:06
回答 10查看 25.4K关注 0票数 239

我正在读“生锈的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;)的非法引用赋值,可以很容易地分析出问题。

在哪些情况下,确实需要显式的生命周期来防止在释放后使用(或其他类?)错误?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31609137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档