关于rust生命期的一个问题,有个地方不太理解,书上也没有说的很清楚,想咨询各位
1. 运行环境
rust
3). 当前系统
rust编译器
4). 业务环境
无
5). 相关软件版本
无
2. 问题描述?
#[derive(Debug)]
struct Diff<’t,’s> {
a: &’t i32,
b: &’s i32,
}
fn diff_life() {
let a1 = 12;
let d;
{
let b1 = 23;
d = Diff{a: &a1, b: &b1};
println!(“d.b:{}”, d.b);
} // 1
println!(“d.a:{}”, d.a); // 2
}
虽然在1的位置,b1已经结束了生命期, 但是a1还是有效的, d.a 引用了a1, 且d.a 和d.b 是不同的生命期,那我在2的位置,访问d.a 为什么不可以?
编译器提示 “因为在1位置释放了b1, 但是仍在2位置借用了”。 2的位置我只是借用了a1而已。
3. 您期望得到的结果?
我认为应该编译通过,但实际上报错
4. 您实际得到的结果?
报错信息如下:
55 | let b1 = 23;
| – binding b1
declared here
56 | d = Diff{a: &a1, b: &b1};
| ^^^ borrowed value does not live long enough
57 | println!(“b:{}”, d.b);
58 | }
| - b1
dropped here while still borrowed
59 | println!(“a:{}”, d.a);
| — borrow later used here
推荐文章: