Box<T> 基础智能指针

  • 特意的将数据分配在堆上
  • 数据较大时,虽然可以放在栈上,但是不想在转移所有权时进行数据拷贝(栈上的数据只会拷贝)

    当栈上数据转移所有权时,实际上是把数据拷贝了一份,最终新旧变量各自拥有不同的数据,因此所有权并未转移。

    而堆上则不然,底层数据并不会被拷贝,转移所有权仅仅是复制一份栈中的指针,再将新的指针赋予新的变量,然后让拥有旧指针的变量失效,最终完成了所有权的转移

  • 类型的大小在编译期无法确定,但是我们又需要固定大小的类型时
  • 特征对象,用于说明对象实现了一个特征,而不是某个特定的类型

Box::leak

可以消费掉 Box 并且强制目标值从内存中泄漏,使用场景:需要一个在运行期初始化的值,但是可以全局有效,也就是和整个程序活得一样久。Box::leak 可以完成动态初始化。