什么是智能指针
trait 决定了类型的行为
1.drerf trait 解引用
2 drop trait 释放资源
二选一实现都可以
只实现 deref tarit 拥有指针语义 赋予类型的指针行为
只实现 drop 拥有内存自动管理机制 赋予了析构行为
use std::ops::Deref;struct MySmartPoint<T>(T);impl<T> MySmartPoint<T> {fn new(x: T) -> MySmartPoint<T> {MySmartPoint(x)}}impl<T> Deref for MySmartPoint<T> {type Target = T;fn deref(&self) -> &Self::Target {&self.0}}fn main() {let x = 5;let y = MySmartPoint::new(x);assert_eq!(5, x);assert_eq!(5, *y)}
智能指针指的是有用指针语义的复合类型。
使用rall机制来管理内存
在堆上分配数据类型 来实现智能指针。
智能指针可以自动解引用转换类型 提升开发体验
Box的使用场景
Box是最简单的封装,除了将值存储在堆上,并没有其他性能上的损耗。而性能和功能往往是鱼和熊掌,因此Box相比其他之智能指针,功能较为单一,可以在一下场景中使用它:
- 特意的将数据分配在腿上
- 数据较大时,又不想在转移所有权时进行拷贝
- 数据的大小在编译器无法确定,但是我们又需要固定大小的类型时
- 特征对象,用于说明对象实现了一个特征,而不是某个特定的类型。
