gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:52:25 26 4
gpt4 key购买 nike

我有一个包含可变引用 (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 的可变引用派生的。

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

最佳答案

有可能有multiple non-mutable references到相同的资源。因此,在编译的代码中,当克隆 MyStruct2 时,您将获得对同一 MyStruct 的两个引用。:

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

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

但是,对资源的唯一可变引用是可能的。所以不可能为MyStruct2自动实现Clone。你可以自己实现它,它看起来像这样:

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

但是您仍然不能对同一个 MyStruct 有两个可变引用。您也无法创建生存时间足以在克隆函数中返回的 MyStruct 的克隆。因此,您必须修改数据结构才能实现这一点。

关于rust - 如何使用可变引用克隆结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com