我有一个包含可变引用(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
结构体已经定义了clone方法,但是对于MyStruct
的可变引用并没有定义clone方法。
是否有一种方法可以克隆一个结构体的可变引用以及包含可变引用的结构体呢?