MST

星途 面试题库

面试题:Rust共享生命周期下的函数设计

编写一个函数,该函数接受两个结构体实例,每个结构体都包含一个共享生命周期的字符串切片。函数需要根据切片内容进行比较并返回结果。请正确标注生命周期参数,并阐述如何确保生命周期的有效性和避免悬空指针。
21.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义结构体
struct MyStruct<'a> {
    data: &'a str,
}

// 比较函数
fn compare_structs<'a>(s1: &MyStruct<'a>, s2: &MyStruct<'a>) -> bool {
    s1.data == s2.data
}

生命周期参数标注与有效性

  1. 生命周期标注:在 MyStruct 结构体定义中,<'a> 表示一个生命周期参数,&'a str 意味着字符串切片的生命周期与 'a 一致。在 compare_structs 函数中,参数 s1s2 也标注了相同的生命周期 'a,这确保了函数内部使用的字符串切片具有相同的有效生命周期。
  2. 确保生命周期有效性:由于函数参数接收的是对结构体实例的引用,并且这些引用的生命周期被标注为 'a,只要调用函数时传入的结构体实例的生命周期至少与 'a 一样长,就不会出现生命周期问题。例如,若 'a 是函数调用所在作用域的生命周期,那么传入的结构体实例的生命周期也应覆盖这个作用域。
  3. 避免悬空指针:在 Rust 中,由于所有权和生命周期系统的存在,编译器会自动检查并防止悬空指针。这里的字符串切片引用 &'a str 只有在其所引用的数据(即结构体实例中的字符串切片)仍然有效时才能使用。因为函数参数的生命周期标注,编译器会确保在函数调用期间,引用的结构体实例不会被释放,从而避免了悬空指针。