视频地址

头条地址:https://www.ixigua.com/i6775861706447913485
B站地址:https://www.bilibili.com/video/av81202308/

讲解内容

1、最简单最直接的智能指针是box,其类型为Box。box允许将值放在堆上而不是栈上,留着栈上的则是指向堆数据的指针。除了数据被存储在堆上外,box没有任何性能损失。

2、box适合用于如下场景:

  • 当有一个在编译时未知大小的类型,而又需要再确切大小的上下文中使用这个类型值的时候;(举例子:在一个list环境下,存放数据,但是每个元素的大小在编译时又不确定)
  • 当有大量数据并希望在确保数据不被拷贝的情况下转移所有权的时候;
  • 当希望拥有一个值并只关心它的类型是否实现了特定trait而不是其具体类型时。

3、使用Box在堆上存储数据:

fn main() {
let b = Box::new(5); //此时5存储在堆上而不是栈上,b本身存储于栈上
println!("b = {}", b); //离开作用域时同时清楚堆和栈上的数据
}