什么是智能指针

trait 决定了类型的行为

1.drerf trait 解引用

2 drop trait 释放资源

二选一实现都可以

只实现 deref tarit 拥有指针语义 赋予类型的指针行为

只实现 drop 拥有内存自动管理机制 赋予了析构行为

  1. use std::ops::Deref;
  2. struct MySmartPoint<T>(T);
  3. impl<T> MySmartPoint<T> {
  4. fn new(x: T) -> MySmartPoint<T> {
  5. MySmartPoint(x)
  6. }
  7. }
  8. impl<T> Deref for MySmartPoint<T> {
  9. type Target = T;
  10. fn deref(&self) -> &Self::Target {
  11. &self.0
  12. }
  13. }
  14. fn main() {
  15. let x = 5;
  16. let y = MySmartPoint::new(x);
  17. assert_eq!(5, x);
  18. assert_eq!(5, *y)
  19. }

智能指针指的是有用指针语义的复合类型。

使用rall机制来管理内存

在堆上分配数据类型 来实现智能指针。

智能指针可以自动解引用转换类型 提升开发体验

Box的使用场景

Box是最简单的封装,除了将值存储在堆上,并没有其他性能上的损耗。而性能和功能往往是鱼和熊掌,因此Box相比其他之智能指针,功能较为单一,可以在一下场景中使用它:

  • 特意的将数据分配在腿上
  • 数据较大时,又不想在转移所有权时进行拷贝
  • 数据的大小在编译器无法确定,但是我们又需要固定大小的类型时
  • 特征对象,用于说明对象实现了一个特征,而不是某个特定的类型。