为什么我可以在 Rust 中返回对局部变量的引用?

问题描述 投票:0回答:0

在下面的代码中,get_x 方法返回对包含在本地 var 中的字符串切片的引用。生命周期注释 &'a 表示返回的引用至少与调用该方法的 Foo 实例一样有效。

但是我返回对局部变量的引用,所以:

  1. 为什么 Rust 允许这样做?
  2. 我是否成功创建了 Use-After-Free?,foo 掉线了,我们仍然在块后的“a”中引用它的成员。
struct Foo<'a> {
    x: &'a str,
}
impl<'a> Foo<'a> {
    fn get_x(&self) -> &'a str {
        "inside"
    }
}

fn main() {
    let s1 = "hello";
    let a;
    {
        let foo = Foo { x: s1 };
        a = foo.get_x();
    }
    println!("x = {}", a); // undefined behavior!
    println!("x = {}", a.len()); // may crash or produce incorrect results, but it dose not, why? 
}
rust memory-management
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.