MST

星途 面试题库

面试题:Rust泛型结构体中生命周期的合理设计

设计一个Rust泛型结构体,该结构体包含一个泛型类型的成员变量,此变量是一个引用。同时,结构体需要实现一个方法,该方法返回一个与结构体生命周期相关的引用。请写出结构体定义、方法实现,并阐述为何这样设计生命周期可以保证内存安全。
20.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义泛型结构体
struct GenericRef<'a, T> {
    ref_value: &'a T,
}

// 实现泛型结构体的方法
impl<'a, T> GenericRef<'a, T> {
    fn get_ref(&self) -> &'a T {
        self.ref_value
    }
}

生命周期设计保证内存安全的原因

  1. 结构体定义GenericRef<'a, T> 中的 'a 生命周期参数表示结构体中 ref_value 引用的生命周期。这意味着结构体实例的生命周期不能超过 ref_value 所引用对象的生命周期。
  2. 方法实现get_ref 方法返回的 &'a T 引用与结构体中的 ref_value 引用具有相同的 'a 生命周期。这样,调用者获取到的引用在结构体存在期间始终是有效的。因为 Rust 的借用检查器会确保在同一时间内,对同一内存区域的引用遵循特定规则,即不会出现悬空引用(dangling reference)。如果结构体的生命周期超过了 ref_value 引用对象的生命周期,借用检查器会报错,从而保证了内存安全。