MST

星途 面试题库

面试题:Rust生命周期在结构体和方法中的复杂运用

定义一个结构体,该结构体包含两个不同生命周期的字符串切片成员。然后为这个结构体实现一个方法,该方法返回其中一个切片,且要正确处理生命周期问题,防止悬空引用。请写出完整的Rust代码,并详细解释每个生命周期标注的意义。
46.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义结构体,包含两个不同生命周期的字符串切片
struct StringContainer<'a, 'b> {
    first: &'a str,
    second: &'b str,
}

// 为结构体实现方法,返回其中一个切片
impl<'a, 'b> StringContainer<'a, 'b> {
    fn get_first(&self) -> &'a str {
        self.first
    }
}

fn main() {
    let s1 = "Hello";
    let s2 = "World";

    let container = StringContainer { first: s1, second: s2 };
    let result = container.get_first();
    println!("{}", result);
}

生命周期标注解释

  1. struct StringContainer<'a, 'b>:这里定义了结构体StringContainer,它有两个泛型生命周期参数'a'b。这两个参数表示结构体中两个字符串切片firstsecond的生命周期。'a表示first切片的生命周期,'b表示second切片的生命周期,它们可以是不同的。
  2. fn get_first(&self) -> &'a str:在impl块中定义了get_first方法。方法签名中的&self表示对结构体的不可变引用,由于结构体中的first切片具有生命周期'a,所以返回的切片也必须具有相同的生命周期'a,这样就保证了返回的切片在其生命周期内是有效的,不会出现悬空引用。在main函数中,创建了StringContainer实例,并调用get_first方法,确保了返回的切片在使用时仍然有效。