将成员的所有权从一个结构移动到另一个结构?

时间:2017-06-12 08:37:20

标签: rust

我有2个结构:

struct MyVector {
    storage: Vec<u32>,
}

struct MyVectorBuilder {
    storage: Vec<u32>,
}

impl MyVectorBuilder {
    fn new() -> MyVectorBuilder {
        MyVectorBuilder { storage: Vec::new() }
    }

    fn build_my_vector(&mut self) -> MyVector {
        // Doesn't compile: ^^^^ cannot move out of borrowed content
        MyVector { storage: self.storage }
    }
}

有没有办法告诉编译器在调用MyVectorBuilder后不会使用build_my_vector(),这样我就可以将storage移到MyVector?< / p>

2 个答案:

答案 0 :(得分:5)

是。将MyVectorBuilder的所有权转交给MakeMyVector

fn make_my_vector(self) -> MyVector {
    MyVector { storage: self.storage }
}

答案 1 :(得分:5)

  

有没有办法告诉编译器在调用MyVectorBuilder之后不会使用BuildMyVector()所以它会让我将存储空间移到MyVector

是的,按值MyVectorBuilder计算:

fn build_my_vector(self) -> MyVector {
    MyVector { storage: self.storage }
}

一般情况下,我建议构建器的build步骤按值依次获取其参数。

如果需要构建两次,构建器可以实现Clone