enum Store { Place { val: Vec<u8> }, } fn subst(val: Vec<u8>, store: &mut Store) { *store = Store::Place { val } }
subst 将移动 val 到里面去 store ,这会导致它被复制。有没有不复制整个向量的方法?我所说的“拷贝”是指内存拷贝。我的理解是,当一个值被移动时(例如 vec 打电话的时候 subst(vec, ...) ,它需要一个完整的副本来擦除父函数堆栈中的数据,并在被调用函数的堆栈上进行分配。
subst
val
store
vec
subst(vec, ...)
此操作仅复制 Vec 对象,即指向其内容(而不是内容本身)的指针、容量和长度,因此您不必担心性能:
Vec
fn move_vec(v: Vec<usize>) -> Vec<usize> { v } fn main() { let v1 = vec![1, 2, 3]; println!("{:p}", &v1[1]); let v2 = move_vec(v1); println!("{:p}", &v2[1]); // the same location as above }