MST
星途 面试题库

面试题:Rust子类型化生命周期继承关系的基础应用

请举例说明在Rust中,如何通过子类型化生命周期的继承关系来处理结构体中引用的生命周期问题。假设存在两个结构体,一个包含短期引用,另一个在其基础上扩展,包含长期引用,展示如何合理定义它们的生命周期并确保类型安全。
19.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义一个短期生命周期的结构体
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);
}

在上述代码中:

  1. ShortLived 结构体包含一个短期引用 data,生命周期为 'a
  2. LongLived 结构体在 ShortLived 的基础上扩展,包含一个长期引用 long_data,其生命周期为 'b,并且通过 'b: 'a 语法表明 'b 的生命周期至少和 'a 一样长,这就是子类型化生命周期的继承关系。这样确保了包含在 LongLived 中的 ShortLived 实例的生命周期不会超过 LongLived 实例本身,从而保证类型安全。在 main 函数中创建实例并使用,未出现生命周期相关错误。