如何解决结构所有权
struct Haha {
pub a: u32,pub b: Vec<u32>,}
let example = Haha {
a: 32,b: vec![1],};
let new_a = example.a;
let new_b = example.b;
我的理解是:
-
new_a
是example.a
的副本,因此example
仍然拥有example.a
。
自 -
example.b
现在拥有example.b
。
new_b
被移动以来,由于具有example.a
特征,锈会隐式复制copy
吗?并且由于example.b
是Vec
,没有实现copy
特征,因此example.b
的所有权是移动的而不是被复制的?
解决方法
您的理解是正确的。 a
在移动b
时被复制。您可以通过尝试随后访问两个字段来确认。
println!("{:?}",example.a);
这将打印32
。 example.a
仍可访问,因为它已被复制而不是移动。
println!("{:?}",example.b);
访问example.b
失败,并显示错误消息:
error[E0382]: borrow of moved value: `example.b`
--> src/main.rs:13:22
|
12 | let _new_b = example.b;
| --------- value moved here
13 | println!("{:?}",example.b);
| ^^^^^^^^^ value borrowed here after move
|
= note: move occurs because `example.b` has type `std::vec::Vec<u32>`,which does not implement the `Copy` trait
这完全确认了您的发言,example.b
之所以被感动是因为它没有实现Copy
特质。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。