Ich möchte eine Funktion implementieren, die ein neues Element instanziiert, es zu einer verknüpften Liste hinzufügt und dann den Verweis auf das soeben erstellte Element zurückgibt. Das ist, was ich kam mit:Rückverweis auf Linkedlist-Element
use std::collections::LinkedList;
struct Bar {
ll: LinkedList<Foo>
}
struct Foo {}
impl Bar {
fn foo_alloc<'a>(&'a mut self) -> &Option<&'a mut Foo> {
let foo = Foo{};
self.ll.push_back(foo);
&self.ll.front_mut()
}
}
Ich dachte, dass wenn ich die Lebensdauer des zurückgegebenen Verweis auf die Bar
Instanz (über &'a mut self
) binden dann das genug sein sollte, aber anscheinend ist es nicht.
Hier ist der Fehler:
error: borrowed value does not live long enough
--> src/main.rs:14:10
|
14 | &self.ll.front_mut()
| ^^^^^^^^^^^^^^^^^^^ does not live long enough
15 | }
| - temporary value only lives until here
|
note: borrowed value must be valid for the lifetime 'a as defined on the body at 11:59...
--> src/main.rs:11:60
|
11 | fn foo_alloc<'a>(&'a mut self) -> &Option<&'a mut Foo> {
| ____________________________________________________________^ starting here...
12 | | let foo = Foo{};
13 | | self.ll.push_back(foo);
14 | | &self.ll.front_mut()
15 | | }
| |_____^ ...ending here
Ja, das löst es. Ist es richtig zu sagen, dass 'self.ll.front_mut()' eine 'Option' auf dem Stack und die' & 'erstellt, bevor versucht wird, den Verweis auf die Option zurückzugeben, die natürlich nicht lange genug lebt, wenn sie gelöscht wird das Ende der Methode? – hansaplast
Ja, die zurückgegebene Option ist temporär, daher können Sie keine Referenz zurückgeben. –