Почему тип в структуре данных связанного списка, использующей ссылки, должен иметь статическое время жизни?

#struct #rust #lifetime

#struct #Ржавчина #время жизни

Вопрос:

При реализации структуры данных связанного списка с использованием ссылок я столкнулся со следующей ситуацией:

 pub struct Node<'a, T> {
    parent: Option<amp;'a Node<'a, T>>,
    data: T
}
  

Эта структура не может быть создана при использовании 'static времени жизни для 'a и типа T с не 'static временем жизни. Например, рассмотрим структуру (Rust Playground):

 struct Foo<'a> {
    bar: Node<'static, amp;'a i32>
}
  

Включение этого приводит к ошибке компилятора:

 error[E0477]: the type `amp;'a i32` does not fulfill the required lifetime
 --> srcmain.rs:9:10
  |
9 |     bar: Node<'static, amp;'a i32>
  |          ^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: type must satisfy the static lifetime
  

Почему здесь T должно быть 'static время жизни?

Комментарии:

1. Вы заявили, что все Node s имеют ссылку со временем жизни и содержат больше ссылок с тем же временем жизни. Почему вы ожидаете, что затем сможете объявить их разными?

2. @Shepmaster Извините, вы, конечно, полностью правы. Я был настолько сосредоточен на случае parent == None (где это имело бы некоторый смысл), что не заметил, что существование родительского элемента со временем жизни 'static уже заставляет T быть статичным.