let v = vec![1,2,3,4];
let v2 = v[2];
let f = move || {
drop(v2);
};
f();
println!("{}", v[2]);
输出结果是:
3
疑问:v[2]
不是被转移所有权了吗,而且v
的内容都在堆上,下面怎么还可以正常打印v[2]
的值呢
1
共 5 条评论, 1 页
let v = vec![1,2,3,4];
let v2 = v[2];
let f = move || {
drop(v2);
};
f();
println!("{}", v[2]);
输出结果是:
3
疑问:v[2]
不是被转移所有权了吗,而且v
的内容都在堆上,下面怎么还可以正常打印v[2]
的值呢
评论区
写评论此外,你还要知道 Vec 具有 Index trait
--
👇
leslieDD: 基本类型都有Copy,无论数据是在栈上还是在堆上
--
👇
ZIP97: 自己去标准库看 Copy trait 、Clone trait、Drop trait
具有 Copy 语义的类型不会被 move
👇
leslieDD: 基本类型都有Copy,无论数据是在栈上还是在堆上
--
👇
ZIP97: 自己去标准库看 Copy trait 、Clone trait、Drop trait
i32实现了Copy,那个let v2=v[2]应该是复制而不是转移所有权。
基本类型都有Copy,无论数据是在栈上还是在堆上
--
👇
ZIP97: 自己去标准库看 Copy trait 、Clone trait、Drop trait
自己去标准库看 Copy trait 、Clone trait、Drop trait