1

下面的代码创建一个结构体,该结构体持有一个结构体的引用,该结构体在最后被移出函数。借用检查员生气是因为,我想,移动某物会破坏它的原始位置。我的问题是:在不更改结构定义的情况下,我是否可以在另一个函数中构造一个 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);
}
4

0 回答 0