Rust 返回对Linkedlist元素的引用
我想实现一个函数,它实例化一个新元素,将它添加到一个链表中,然后返回对它刚刚创建的元素的引用。这就是我想到的:Rust 返回对Linkedlist元素的引用,rust,lifetime,Rust,Lifetime,我想实现一个函数,它实例化一个新元素,将它添加到一个链表中,然后返回对它刚刚创建的元素的引用。这就是我想到的: use std::collections::LinkedList; struct Bar { ll: LinkedList<Foo> } struct Foo {} impl Bar { fn foo_alloc<'a>(&'a mut self) -> &Option<&'a mut Foo>
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()
}
}
问题不在于选项内部的引用,而在于选项对象本身。按值返回,而不是按引用返回
impl Bar {
fn foo_alloc(&mut self) -> Option<&mut Foo> {
let foo = Foo{};
self.ll.push_back(foo);
self.ll.front_mut()
}
}
我还删除了生存期注释,因为默认的生存期推断在这里做了正确的事情。是的,这就解决了它。self.ll.front_mut在尝试返回对该选项的引用之前,在堆栈和上创建了一个选项,该选项当然没有足够长的生存时间,因为它是在方法末尾删除的。这样说是否正确?是的,返回的选项是临时的,因此不能返回引用。
impl Bar {
fn foo_alloc(&mut self) -> Option<&mut Foo> {
let foo = Foo{};
self.ll.push_back(foo);
self.ll.front_mut()
}
}