什么是智能指针
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相比其他之智能指针,功能较为单一,可以在一下场景中使用它:
- 特意的将数据分配在腿上
- 数据较大时,又不想在转移所有权时进行拷贝
- 数据的大小在编译器无法确定,但是我们又需要固定大小的类型时
- 特征对象,用于说明对象实现了一个特征,而不是某个特定的类型。