MST

星途 面试题库

面试题:Rust中复杂生命周期在结构体中的应用

假设有两个结构体 `A` 和 `B`,`A` 包含一个 `String` 类型的成员,`B` 包含一个指向 `A` 中 `String` 的引用。请写出正确定义这两个结构体及其生命周期标注的代码,并在一个函数中创建它们的实例并返回 `B` 的实例。
25.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
struct A {
    s: String,
}

struct B<'a> {
    ref_s: &'a String,
}

fn create_instances() -> B<'static> {
    let a = A {
        s: String::from("example"),
    };
    B {
        ref_s: &a.s,
    }
}

解释:

  1. A 结构体简单地包含一个 String 类型的成员 s
  2. B 结构体包含一个指向 String 的引用 ref_s,由于引用需要指定生命周期,这里使用泛型生命周期参数 'a 标注。
  3. create_instances 函数中,创建 A 的实例 a,并将 a.s 的引用传递给 B 的构造函数,返回 B 的实例。这里由于 a 是在函数内部创建的,为了让返回的 B 实例中的引用有效,我们假设这个 String 会一直存在,所以返回的 B 实例标注为 B<'static>。实际应用中如果 a 的生命周期更复杂,需要根据具体情况调整。