【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 指针不应该再用,这里不能再访问
}

 

posted @ 2025-07-04 14:20  苏格拉底的落泪  阅读(10)  评论(0)    收藏  举报