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