【rust】Box
Box
use std::ptr;
struct MyStruct {
value: i32,
}
impl MyStruct {
fn new(val: i32) -> Self {
Self { value: val }
}
fn print(&self) {
println!("MyStruct value = {}", self.value);
}
}
fn main() {
// 创建一个 Box<MyStruct>
let b = Box::new(MyStruct::new(42));
// 转成裸指针,交给外部管理
let raw = Box::into_raw(b);
// 此时 Rust 不再管理内存,必须手动转换回来释放
unsafe {
// 通过裸指针访问数据
(*raw).print();
// 重新包装成 Box,Rust 重新获得所有权,离开作用域时自动释放内存
let boxed_again = Box::from_raw(raw);
// boxed_again 离开作用域自动 drop
}
// raw 指针不应该再用,这里不能再访问
}

浙公网安备 33010602011771号