我正在实现一个算法,为了保持所需的时间复杂度,我想持有一个指向正在移动的元素的Vec
指针Vec
。
具体来说,是这样的:
fn main() {
let mut v: Vec<usize> = vec![1, 2, 3];
let ptr: *mut usize = &mut v[1] as *mut usize;
let mut u: Vec<usize> = v;
assert!(ptr == &mut u[1] as *mut usize);
println!("{}", unsafe { *ptr });
}
实际的代码更复杂,并且涉及一个树状数据结构,其中每个顶点拥有一个Vec
子节点。我不是在这里询问编码风格,但我的问题是关于是否可以依靠这段代码来做我认为它做的事情。
由于Vec
必须将其内容保存在堆上,并且移动等同memcpy
于 Rust,我认为Vec
可移动的事实意味着我的代码是合理的(即不是未定义的行为)。这个对吗?