diesen Code Gegeben:Warum ist das gebundene `T: 'a' erforderlich, um eine Referenz '&' ein T 'zu speichern?
struct RefWrapper<'a, T> {
r: &'a T,
}
... der Compiler beschwert sich:
error: the parameter type
T
may not live long enoughconsider adding an explicit lifetime bound
T: 'a
so that the reference type&'a T
does not outlive the data it points at.
ich diesen Fehler bereits mehrmals gesehen habe und so weit ich hörte nur an den Compiler und alles hat prima geklappt . Jedoch, mehr darüber nachzudenken, verstehe ich nicht warum Ich muss T: 'a
schreiben.
Soweit ich verstehe, ist es bereits unmöglich, eine solche Referenz zu bekommen. &'a T
bedeutet, dass es ein Objekt vom Typ T
gibt, das für mindestens 'a
lebt. Aber wir können keine Referenzen in dem Objekt speichern, die auf Daten mit einer kürzeren Lebensdauer als 'a
zeigen. Dies würde bereits zu einem Compilerfehler führen.
In diesem Sinne ist es bereits unmöglich, eine &'a T
zu bekommen, wo T
nicht überlebt 'a
. Daher sollte die zusätzliche Anmerkung (T: 'a
) nicht notwendig sein.
Bin ich richtig? Bin ich falsch und wenn ja: wie könnte ich Code brechen, wenn T: 'a
nicht benötigt würde?
Links:
I gefragt auf #rust und es scheint, dass [dieser code] (https: // github.com/rust-lang/rost/issues/24622 # issementcomment-94761287) würde Dinge brechen, wenn die 'T: 'a-Anforderung aufgehoben wurde. Aber ich verstehe diesen Code noch nicht wirklich und ich werde jetzt aufhören, es zu versuchen. Hoffentlich versteht jemand, der das Problem versteht, in der Zwischenzeit^_^ –
[Related RFC vom August 2017] (https://github.com/rust-lang/rfcs/pull/2093) –