我是Rust的新手,我不明白为什么你需要在下面的代码片段中指出Outer
结构的生命周期。
以下代码无法编译(错误:缺少生存期说明符,应为命名的生存期参数):
struct Inner<'a> {
i: &'a i32
}
struct Outer {
inner: Inner
}
字符串
以下代码按预期编译:
struct Inner<'a> {
i: &'a i32
}
struct Outer<'a> {
inner: Inner<'a>
}
型
我不明白为什么在这种情况下需要指定Inner
的生存期,因为它是作为Outer
中的一个值存储的。(因为它属于Outer
),并且i
与Inner
的任何示例一样长?那么,为什么我们不能推断引用i
将与Outer
的任何示例一样长?
1条答案
按热度按时间vojdkbi01#
我不明白为什么在这种情况下需要指定
Inner
的生存期我认为这是对
&'a Foo
和Foo<'a>
之间区别的误解第一个是
&'a Foo
,是对Foo
的借用引用,该引用被其他生命周期(至少)为'a
的东西拥有。第二个,
Foo<'a>
,是一个拥有的类型,出于某种原因,它只在生命周期'a
内有效-通常是因为它持有一个为该生命周期借用的引用,或者(像你的情况一样)另一个只在该生命周期内有效的类型。假设你的第一个代码段是有效的,如果inner引用的值超出了作用域,那么
Outer
的值就不再有效了,即使它(间接)引用了一个被删除的值,这也是不允许的。