面试题答案
一键面试// 定义一个短期生命周期的结构体
struct ShortLived<'a> {
data: &'a str,
}
// 定义一个在ShortLived基础上扩展的长期生命周期结构体
struct LongLived<'a, 'b: 'a> {
short: ShortLived<'a>,
long_data: &'b str,
}
fn main() {
let short_str = "short";
let long_str = "long";
let short = ShortLived { data: short_str };
let long = LongLived {
short,
long_data: long_str,
};
println!("Short: {}", long.short.data);
println!("Long: {}", long.long_data);
}
在上述代码中:
ShortLived
结构体包含一个短期引用data
,生命周期为'a
。LongLived
结构体在ShortLived
的基础上扩展,包含一个长期引用long_data
,其生命周期为'b
,并且通过'b: 'a
语法表明'b
的生命周期至少和'a
一样长,这就是子类型化生命周期的继承关系。这样确保了包含在LongLived
中的ShortLived
实例的生命周期不会超过LongLived
实例本身,从而保证类型安全。在main
函数中创建实例并使用,未出现生命周期相关错误。