Warum gibt der Rust-Compiler einen Fehler aus, der mich auffordert, die Lebensdauer des generischen Parameters in der folgenden Struktur einzuschränken?Warum fordert die Rust-Compiler-Anfrage die Lebensdauer eines generischen Typparameters auf (Fehler E0309)?
pub struct NewType<'a, T> {
x: &'a T,
}
error[E0309]: the parameter type `T` may not live long enough
--> src/main.rs:2:5
|
2 | x: &'a T,
| ^^^^^^^^
|
= help: consider adding an explicit lifetime bound `T: 'a`...
note: ...so that the reference type `&'a T` does not outlive the data it points at
--> src/main.rs:2:5
|
2 | x: &'a T,
| ^^^^^^^^
Ich kann es beheben, indem
pub struct NewType<'a, T>
where
T: 'a,
{
x: &'a T,
}
an sich ändernde Ich verstehe nicht, warum es notwendig ist, die T: 'a
Teil der Strukturdefinition hinzuzufügen. Ich kann mir nicht vorstellen, dass die in T
enthaltenen Daten den Verweis auf T
überleben könnten. Der Referent von x
muss die NewType
Struktur überleben und wenn T
eine andere Struktur ist, dann müsste es die gleichen Kriterien für alle Referenzen erfüllen, die es auch enthält.
Gibt es ein spezifisches Beispiel, wo diese Art von Annotation notwendig wäre oder ist der Rust-Compiler nur pedantisch?
Dies wird doppelt verwirrend mit den zugehörigen Typen.Sie müssen binden :: Associated: 'a *, auch wenn * Sie bereits T Lebenszeit gebunden, die für mich nicht wirklich sinnvoll ist. –
LinearZoetrope