以下代码无法编译:
struct Ref<'a> {
nbr: &'a u32,
}
fn func<'a>() {
let nbr: u32 = 42;
let _a_ref: Box<Ref<'a>> = Box::new(Ref { nbr: &nbr });
}
fn main() {
func();
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说'nbr' does not live long enough,它在仍然借用的末尾被删除func()。我基本上到处都搜索过,但我不明白为什么会出现这个错误。与声明相比,变量应该以相反的顺序删除,因此包含Ref引用的框应该在nbr删除之前删除,对吗?
如果我改成func():
fn func<'a>() {
let nbr: u32 = 42;
let _a_ref = Ref { nbr: &nbr };
}
Run Code Online (Sandbox Code Playgroud)
它构建得很好!因此,盒装参考所需的生命周期/范围存在一些差异 - 但我找不到对这个明显基本问题的任何清晰和简单的解释。
_a_ref为了让它更加混乱,我注意到如果我声明这样的类型:
fn func<'a>() {
let nbr: u32 = 42;
let _a_ref: …Run Code Online (Sandbox Code Playgroud)