考虑以下代码片段:
fn main() {
let mut v1 = vec![1, 2, 3];
println!("The address of vector v1 is {:p}", &v1);
let v2 = v1;
println!("The address of vector v2 is {:p}", &v2);
v1 = v2;
println!("The address of vector v1 is {:p}", &v1);
}
以及输出
The address of vector v1 is 0x7fff253de570
The address of vector v2 is 0x7fff253de5e0
The address of vector v1 is 0x7fff253de570
为什么v1
和v2
的值不同?
- 首先,
&v2
真的表示向量vec![1,2,3]
在第二行声明的地址吗? - 如果将
v1
的值复制到v2
,那么向量不应该具有复制特性(trait)吗? - 如果
v1
的值被移动到由v2
标识的新内存位置,那么为什么还需要这样做呢?为什么v2
不直接指向v1
的内存位置,因为所有权已经转移到了v2
,所以v1
基本上是没用的,除非我重新分配它(简而言之,如果它是内存复制,为什么所有权转移需要一个memcpy
?) - 当
v1
再次赋值给v2
时,我如何得到相同的地址位置?