下面的代码创建一个结构体,该结构体持有一个结构体的引用,该结构体在最后被移出函数。借用检查员生气是因为,我想,移动某物会破坏它的原始位置。我的问题是:在不更改结构定义的情况下,我是否可以在另一个函数中构造一个 B 和一个引用该 B 的 A,然后将它们返回到调用上下文?
#[derive(Debug)]
pub struct A<'a> {
pub b: &'a B,
}
impl<'a> A<'a> {
pub fn new(b: &'a B) -> A<'a> {
A { b }
}
}
#[derive(Debug)]
pub struct B {
pub x: i32,
}
fn nested<'a>() -> (A<'a>, B) {
let x = 0;
let b = B { x };
let a = A::new(&b);
(a, b)
}
fn main() {
let (a, b) = nested();
println!("{:?}", a);
}