use std::ptr;
use std::slice;
fn main() {
let mut rust = "rust".to_string();
let ptr = &rust as *const String as usize;//还指向堆中的u8序列
println!("rust is {:p}", &rust);
println(ptr);
let java = rust;//move后
println!("java is {:p}", &java);
// drop(java);//可以提前释放,结果发现是二次释放u8序列,报错了
rust = "new".to_string();
println!("rust is {:p},value is {}", &rust,rust);
println(ptr);
}//最后清理,二次释放u8序列,报错了
fn println(ptr: usize) {
unsafe {
let ptr = ptr as *const String;
let mut s2 = ptr::read(ptr);
println!("{}", s2);
}//释放了指向堆u8序列
}
rust中move后,还能访问到原来的值不及在rust中实现对内存重复释放
于 2020-11-27 15:01:30 首次发布