我有一个结构,其中包含一个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
。
有没有办法克隆对结构的可变引用并克隆包含可变引用的结构?
可能有多个对同一资源的非可变引用。所以在编译的代码,你会得到两个引用相同的MyStruct
时MyStruct2
被克隆:
#[derive(Clone)]
struct MyStruct {
val: usize,
}
#[derive(Clone)]
struct MyStruct2<'a> {
struct_reference: &'a MyStruct
}
但是,只能对资源进行单个可变引用。因此,不可能自动实现Clone
for MyStruct2
。您可以自己实现它,它看起来像这样:
impl<'a> Clone for MyStruct2<'a> {
fn clone(&self) -> MyStruct2<'a> {
// your code here
}
}
但是你仍然不能有两个相同的可变引用MyStruct
。您也无法创建MyStruct
其寿命足够长的克隆以返回clone函数。因此,您必须修改数据结构才能实现这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句