博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【RUST】Ch15 智能指针(Smart Pointers)
阅读量:6417 次
发布时间:2019-06-23

本文共 1008 字,大约阅读时间需要 3 分钟。

指针,通常是指一个包含内存地址的变量。这个地址通常引用,或者说指向其他数据。在Rust中,最常见的指针类型就是引用(reference),其已经在第4章中介绍。引用会被 & 符号所标明,同时从他们所指向的数据中借出值。跟引用指向的数据相比较,引用并没有任何特殊能力。 同时,引用也没有我们通常所使用的指针所带来的开销。

在另一方面,智能指针不仅仅是一种行为看起来像指针的数据结构,也同时拥有额外的元数据和能力。智能指针的概念不仅仅只存在于rust中,它起源于C++,也存在于其他语言中。 在Rust中,标准库中定义的不同的智能指针的能力超出了引用所提供的能力。我们在本章中学习的‘引用计数’智能指针就是一个列子。这种指针通过保存拥有者的总数来使得你有多个数据拥有者,同时,当没有拥有者时,则清楚数据.

在rust中,我们使用了拥有者和借出的概念。引用和智能指针的一个额外区别是,引用仅仅是用来借数据的指针,相反的,在很多场景中,智能指针对他们指向的数据有拥有权

在本书中,我们已经遇到过几种智能指针来,比如第八章中的String和Vec<T>,虽然当时我们还没有把它们叫做智能指针。这两种其实都是智能指针,因为它们拥有自己的内存且允许你操作它们。它们也拥有一些元数据(比如容量),并且额外的能力或者约束(比如String确保了它的内容一定是合法的UTF-8)

智能指针一般都通过结构体来实现。与普通的结构体的区别是,智能指针实现了Deref和Drop特征。Deref特征使得一个智能指针的实列的行为跟引用一致,这样使得在引用上工作的代码,移植到智能指针后依然适用。Drop特征则允许你在智能指针的实列在界限外能够自定义一些行为。在本章中,我们会讨论上述两个特征并展示为什么他们对智能指针如此重要。

Rust中,使用智能指针是一种常见的设计模式。本章中并不会覆盖智能指针的每个方面,有很多库实现了自己的智能指针,当然你也可以自己实现。本章会覆盖标准库中的大多数常见的智能指针:

  • Box<T> 用于在堆上分配值
  • Rc<T> 开启多个ownership的引用计数类型
  • Ref<T>和RefMut<T>, 通过RefCell<T>访问,一种在运行时而不是编译时强制借出规则。

除此之外,我们也会涉及到内部可变性模式,用于暴露一个改变内部值到API。我们也会讨论引用循环:引用循环如何导致内存泄露以及如何防止。

让我们开始吧。

转载地址:http://uqpra.baihongyu.com/

你可能感兴趣的文章
HTTP Request Method
查看>>
使用eclipse mybatis generator插件在maven 项目中自动构建代码以及遇到的一些坑
查看>>
设计师都是美工?NO!网页设计 VS. 平面设计有区别!
查看>>
“手把手教你设计”—12个最佳手机APP界面设计教程
查看>>
前端项目的总结——css in js 的好处?
查看>>
(九)整合spring cloud云服务架构 - HongHu commonservice-eureka 项目构建过程
查看>>
Linux下二进制文件的分割与合并
查看>>
知识点018-IP,PV,UV的区别
查看>>
阿里云飞天技术汇之“阿里云在线直播技术与应用分享”主题沙龙
查看>>
WEB Struts2 构建struts2框架
查看>>
javascript Date format(js日期格式化)
查看>>
spring2
查看>>
怎样判断一个变量的类型?
查看>>
Single Number三连
查看>>
JavaScript事件处理
查看>>
Android工具类系列-获取字符串首字母,并对字符串列表进行排序。
查看>>
MySQL详解--锁
查看>>
LINUX系统学习su、sudo、限制root远程登录
查看>>
史上最全的Python面向对象知识点疏理
查看>>
6年双11,DataV的数据可视化之道
查看>>