#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
быть статичным.