Rust-智能指针:使用Box <T>指向堆上的数据

最简单直接的智能指针是box,其类型是Box<T>。box允许你将一个值放在堆上而不是栈上。留在栈上的则是指向堆数据的指针。Rust中栈与堆的区别

除了数据被储存在堆上而不是栈上之外,box没有性能损失。不过也没有很多额外的功能。

使用Box<T>在堆上储存数据

在讨论Box<T>的用例之前,我们学习一下语法以及如何与储存在Box<T>中的值进行交互。

如下使用box在堆上储存一个i32值:

    let b = Box::new(5);
    println!("b is {}", b);

这里定义了变量b,其值是一个指向被分配在堆上的值5的Box。在这个例子中,我们可以像数据是储存在栈上的那样访问box中的数据。正如任何拥有数据所有权的值那样,当像b这样的box在main的末尾离开作用域时,它将被释放。这个释放过程作用于box本身(位于栈上)和它所指向的数据(位于堆上)。

Box<T> 类型是一个智能指针,因为它实现了 Deref trait,它允许 Box<T> 值被当作引用对待。当Box<T>值离开作用域时,由于Box<T>类型 Drop trait的实现,box所指向的堆数据也会被清除。

深入学习

posted @ 2021-09-28 22:07  johnny_zhao  阅读(328)  评论(0编辑  收藏  举报