[英]Lifetime of a value vs lifetime of a borrow
我设法编写并编译了以下代码:
trait Runner {}
struct Human {}
impl Runner for Human {}
struct Player<'a, T>
where
T: Runner + 'a,
{
t: &'a T,
}
impl<'a, T> AsRef<T> for Player<'a, T>
where
T: Runner + 'a,
{
fn as_ref(&self) -> &T {
self.t
}
}
fn main() {}
我的理解是,在struct Player
的定义, T
一些实现特征的具体类型Runner
和T
的寿命'a
长。 t
是借入T
,借入也'a
长。
这种理解正确吗?
在impl AsRef for Player
的定义中,编译器如何知道返回的as_ref
的生存期为T
(从as_ref
),其中T
的生存期为'a
需要小于或等于'a
? 向self
借钱的寿命是多长?
如果编译器可以确保引用的结构T
的字段超过T
的生存期,则Rust将成功构建。
使用这样的Player
定义:
struct Player<'a, T>
where
T: Runner + 'a,
{
t: &'a T,
}
我们用'a
的寿命t
命名。
随着T: Runner + 'a
我们宣布T
实现了Runner
,并在所有的(最终)引用T
必须活得比'a
出于上述考虑,如果t
生命周期为'a
则Player
值的生命周期严格小于'a
。
让我们将'b
这样的Player
值生存期命名为,然后: 'b < 'a
为避免终身 as_ref
,我们可以将as_ref
重写为:
fn as_ref<'b>(&'b self) -> &'b T {
self.t
}
self
借贷和返回&T
的生命周期严格来说是'a
较小生命。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.