首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将成员的所有权从一种结构转移到另一种结构?

将成员的所有权从一种结构转移到另一种结构?
EN

Stack Overflow用户
提问于 2017-06-12 08:37:20
回答 2查看 2.9K关注 0票数 8

我有两个结构:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-12 08:39:50

是。将MyVectorBuilder的所有权传递给MakeMyVector

代码语言:javascript
复制
fn make_my_vector(self) -> MyVector {
    MyVector { storage: self.storage }
}
票数 8
EN

Stack Overflow用户

发布于 2017-06-12 08:40:37

是否有一种方法可以告诉编译器,在调用MyVectorBuilder时不会使用BuildMyVector(),这样就可以将存储移到MyVector上了吗?

是的,按价值计算MyVectorBuilder

代码语言:javascript
复制
fn build_my_vector(self) -> MyVector {
    MyVector { storage: self.storage }
}

通常,我建议构建器的build步骤正是基于这个原因通过值进行论证。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44494888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档