当我定义以下结构时:
struct Test<'a> {
a: &'a [i64],
b: Vec<i64>,
}
Run Code Online (Sandbox Code Playgroud)
切片和向量都包含指针.为什么切片需要一生,但不是矢量?
Fra*_*gné 16
矢量拥有其元素.这意味着向量负责分配和释放它指向的元素.向量元素的生命周期与向量本身的生命周期相同,因此无需为该Vec类型指定生命周期.
切片借用可以静态或动态分配的向量或数组的元素.切片必须指示借用元素的生命周期,以便编译器可以进行必要的安全检查.
另一种表达方式是通过比较两个选项之间的事件顺序.
对于矢量:
Vec已分配.最初没有为元素分配存储空间(当它Vec为空时).Vec存储指向该存储的指针.Vec释放自身.对于切片:
编辑
一般来说,对于借用的指针(&'a X),包含借用指针的类型(X<'a>,其中Xa struct或者enum具有成为借用指针的成员)和特征对象/约束(X+'a,其中X是a trait)的类型,需要生命周期注释.类型用作struct或的成员enum.
在let绑定和as操作符的右侧,通常编写借用的指针类型而不使用生命周期注释(即只是&X),因为编译器会在这种情况下推断生命周期.
你需要记住的是,在直接或间接处理借用指针时,生命周期注释是必要的.
如果您想了解有关所有权,借用和生命周期的更多信息,我建议您阅读Rust Guide的指针部分以及Rust References和Lifetimes Guide
| 归档时间: |
|
| 查看次数: |
4973 次 |
| 最近记录: |