MST
星途 面试题库

面试题:Rust智能指针的基础实现

在Rust中,简述`Box<T>`智能指针的实现原理,它是如何管理内存的?如果有一个自定义结构体`MyStruct`,如何使用`Box<MyStruct>`来分配在堆上并访问其成员?
26.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. Box<T>智能指针实现原理及内存管理
    • 原理Box<T>是Rust标准库提供的一种智能指针,用于在堆上分配数据。它通过内部持有指向堆上数据的指针来实现对数据的引用。
    • 内存管理:当Box<T>离开其作用域时,Rust的所有权系统会自动调用Box<T>的析构函数。在析构函数中,Box<T>会释放其指向的堆内存,从而防止内存泄漏。这一切都是自动的,无需手动管理内存释放。
  2. 使用Box<MyStruct>分配在堆上并访问其成员
    struct MyStruct {
        data: i32,
    }
    
    fn main() {
        let my_box = Box::new(MyStruct { data: 42 });
        // 访问成员
        println!("The data is: {}", my_box.data);
    }
    
    在上述代码中,通过Box::newMyStruct实例分配到堆上,得到Box<MyStruct>。之后可以像访问普通结构体成员一样,使用点号(.) 来访问其成员。