为什么在Rust中为存储引用的有值存储结构指定生存期?

e4yzc0pl  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(152)

我是Rust的新手,我不明白为什么你需要在下面的代码片段中指出Outer结构的生命周期。
以下代码无法编译(错误:缺少生存期说明符,应为命名的生存期参数):

  1. struct Inner<'a> {
  2. i: &'a i32
  3. }
  4. struct Outer {
  5. inner: Inner
  6. }

字符串
以下代码按预期编译:

  1. struct Inner<'a> {
  2. i: &'a i32
  3. }
  4. struct Outer<'a> {
  5. inner: Inner<'a>
  6. }


我不明白为什么在这种情况下需要指定Inner的生存期,因为它是作为Outer中的一个值存储的。(因为它属于Outer),并且iInner的任何示例一样长?那么,为什么我们不能推断引用i将与Outer的任何示例一样长?

vojdkbi0

vojdkbi01#

我不明白为什么在这种情况下需要指定Inner的生存期
我认为这是对&'a FooFoo<'a>之间区别的误解
第一个是&'a Foo,是对Foo的借用引用,该引用被其他生命周期(至少)为'a的东西拥有。
第二个,Foo<'a>,是一个拥有的类型,出于某种原因,它只在生命周期'a内有效-通常是因为它持有一个为该生命周期借用的引用,或者(像你的情况一样)另一个只在该生命周期内有效的类型。
假设你的第一个代码段是有效的,如果inner引用的值超出了作用域,那么Outer的值就不再有效了,即使它(间接)引用了一个被删除的值,这也是不允许的。

相关问题