如何使用可变引用克隆结构

迪夫利

我有一个结构,其中包含一个MyStruct2我需要克隆的可变引用(),所以我派生了Clone该结构方法:

#[derive(Clone)]
struct MyStruct {
    val: usize,
}

#[derive(Clone)]
struct MyStruct2<'a> {
    struct_reference: &'a mut MyStruct
}

但是,当我编译此代码时,出现以下错误消息:

src/main.rs:419:3: 419:37 error: the trait `core::clone::Clone` is not implemented for the type `&mut MyStruct` [E0277]
src/main.rs:419         struct_reference: &'a mut MyStruct
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/main.rs:417:11: 417:16 note: in this expansion of #[derive_Clone] (defined in src/main.rs)
src/main.rs:419:3: 419:37 help: run `rustc --explain E0277` to see a detailed explanation
src/main.rs:419:3: 419:37 help: the following implementations were found:
src/main.rs:419:3: 419:37 help:   <MyStruct as core::clone::Clone>
src/main.rs:419:3: 419:37 note: required by `core::clone::Clone::clone`
error: aborting due to previous error

如果我使引用不可变,则代码会编译。

#[derive(Clone)]
struct MyStruct {
    val: usize,
}

#[derive(Clone)]
struct MyStruct2<'a> {
    struct_reference: &'a MyStruct
}

似乎即使克隆是为该结构派生的MyStruct,但它也并不是为可变引用派生的MyStruct

有没有办法克隆对结构的可变引用并克隆包含可变引用的结构?

维姆

可能有多个对同一资源的非可变引用所以在编译的代码,你会得到两个引用相同的MyStructMyStruct2被克隆:

#[derive(Clone)]
struct MyStruct {
    val: usize,
}

#[derive(Clone)]
struct MyStruct2<'a> {
    struct_reference: &'a MyStruct
}

但是,只能对资源进行单个可变引用。因此,不可能自动实现Clonefor MyStruct2您可以自己实现它,它看起来像这样:

impl<'a> Clone for MyStruct2<'a> {
    fn clone(&self) -> MyStruct2<'a> {
        // your code here
    }
}

但是你仍然不能有两个相同的可变引用MyStruct您也无法创建MyStruct其寿命足够长的克隆以返回clone函数。因此,您必须修改数据结构才能实现这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用返回可变引用的迭代器创建自己的数据结构?

如何使用另一个结构覆盖可变引用中的所有字段?

如何使用Doxygen链接(引用)结构的成员?

如何引用特征并仍使用原始结构?

如何使用引用向量创建结构?

如何使用变量来引用结构的键?

如何克隆SVN忽略结构?

使用 guid 克隆树结构

如何对自己的数据结构使用可变参数?

如何在可变引用结构中为字段交换新值?

从特征方法返回对结构字段的可变引用时,如何修复生命周期不匹配?

深克隆,同时保留对可变对象的共享引用

如何使用“ index_mut”获取可变引用?

如何使Rust可变引用不可变?

如何可变引用不可变值

如何使用match来保证可变性变量并且不需要克隆,从而修改可变变量?

如何同时使用可变字段和不可变字段初始化结构?

使用可变引用遍历递归结构并返回最后一个有效引用

使用null结构引用

带有反向引用的克隆树数据结构?

如何克隆存储盒装特征对象的结构?

如何克隆未导出字段的结构?

Git:使用父层次结构克隆仓库

如何使用自引用结构定义(在 C 中)?

如何使用结构化引用创建数组公式?

如何使用双指针正确引用结构中的指针

如何在克隆元素上放置引用?

如何在不使用 Copy 或 Clone 的情况下在 Rust 中克隆结构?

具有许多可变引用的 Rust 回溯树结构