Box<T>
基础智能指针
- 特意的将数据分配在堆上
- 数据较大时,虽然可以放在栈上,但是不想在转移所有权时进行数据拷贝(栈上的数据只会拷贝)
当栈上数据转移所有权时,实际上是把数据拷贝了一份,最终新旧变量各自拥有不同的数据,因此所有权并未转移。
而堆上则不然,底层数据并不会被拷贝,转移所有权仅仅是复制一份栈中的指针,再将新的指针赋予新的变量,然后让拥有旧指针的变量失效,最终完成了所有权的转移
- 类型的大小在编译期无法确定,但是我们又需要固定大小的类型时
- 特征对象,用于说明对象实现了一个特征,而不是某个特定的类型
Box::leak
可以消费掉 Box
并且强制目标值从内存中泄漏,使用场景:需要一个在运行期初始化的值,但是可以全局有效,也就是和整个程序活得一样久。Box::leak
可以完成动态初始化。