I m new to Rust and when Iread a book ( https://rust-book.cs.brown.edu/ch04-05- Ownership-recap.html)。
提及不可复制数据时,不准许O避免双重豁免
O许可是物体的所有权。 只可能存在物体的所有人,因此,提及不能转让诸如“Sting”等不可复制类型的所有权。 如果两个变量认为它们拥有同样的界限,那么这两个变量都会试图加以定位,造成双重自由。
认为我们有以下法典:
let v = vec![1, 2, 3];
let v_ref: &Vec<i32> = &v;
let v2 = *v_ref;
// drop(v2);
// drop(v);
编辑会抱怨:
error[E0507]: cannot move out of `*v_ref` which is behind a shared reference
--> src/main.rs:32:14
|
32 | let v2 = *v_ref;
| ^^^^^^ move occurs because `*v_ref` has type `Vec<i32>`, which does not implement the `Copy` trait
...... 如果我们直接宣布变数为变数2,然后将 v2,那么情况如何?
let v = vec![1, 2, 3];
let v2 = v;
由于vec
的移动,该编码可操作。 因此,没有双重限制? 它会下降吗?
我混淆了why,我们使用了参考文献的精髓,它指的是赢得t move,如上面的代码,以防止双重自由?
这是Rust的一条具体规则吗? 是否应当使守则的流通更加清楚(通过明确采取行动避免通过疏漏进行意外转移)? 我是否只是需要记住和遵守?