Rust in Action笔记 第四章生命周期、所有权、借用

这篇具有很好参考价值的文章主要介绍了Rust in Action笔记 第四章生命周期、所有权、借用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 第四章用了一个行星通信的例子来阐述整个主题,主要角色有地面站(Ground station)、人造卫星(CubeSat),两者有不同的状态并且能互相发消息通信;

  2. Rust有类型安全(type safety)机制来检查函数的类型和返回值,如果一个自定义类型(用struct声明的)包含了非内置类型(如i32,bool等,它们实现了copy特征),在函数中作为参数时会触发移动(move)语义,其所有权被移动到函数的形参中,图4.2给了一个很直观的所有权转移的过程;Rust in Action笔记 第四章生命周期、所有权、借用

  3. 代码4.5和4.6给出了具备复制语义(copy semantics)的内置类型和具备移动语义(move semantics)的一般类型的使用区别,一个能够通过编译而一个不行,主要区别就在与是否实现了copy trait;

  4. 所有者(owner)拥有某些值的所有权(onwership),一旦owner的生命周期到了(例如走到了所在的代码块的最后}处或者其他原因),他们的析构函数(destructor)就会调用,析构函数会删除所有与之相关的引用(references)并释放内存,大部分的析构函数都会隐式调用,由编译器来完成,如果需要自己定制析构函数的实现和调用时机,可以通过Drop特征来实现,这个只在出现了通过unsafe块实现的内存分配中需要用到;

  5. 所有权的转移有两种途径,一种是变量绑定(variable binding),即通过let关键字来绑定一个对象到某个变量上;一种是通过函数,可以是函数的参数也可以是返回值,详见page115;

  6. 解决所有权问题有4个好用的习惯,a. 如果完整的所有权不是必须的时候可以使用引用(references)详见4.5.1小节;b. 对于有Copy 特征的值可以直接复制,详见4.5.2小节;c. 重构代码,尽量减少那种生命周期很长(long-lived)的对象,详见4.5.3小节;d. 把数据打包在一个新的结构中来辅助解决移动语义的问题,详见4.5.4小节;

  7. CloneCopy的区别在下表4.2中做了详细的对比;Rust in Action笔记 第四章生命周期、所有权、借用

  8. 什么情况下不用Copy,有三个原因,a. Copy的前提是仅仅引入微小的性能代价,即只有数据很小的时候(例如数字i32, i64等)使用Copy带来的性能损失微乎其微;b. Copy是bit级别的复制,可能对引用的处理不一定准确;c. 有些类型重载了Clone,它的复制与原生的复制有一些区别,例如带有引用计数的std::rc::Rc<T>类型;

  9. 通过Rc<RefCell<T>>可以实现内部可变性,同时引入了一点运行时的开销;当使用Clone的代价过于大时,可以使用Rc<RefCell<T>>作为一个备选,Rc<RefCell<T>>并不是多线程安全的;详见page132;文章来源地址https://www.toymoban.com/news/detail-488622.html

到了这里,关于Rust in Action笔记 第四章生命周期、所有权、借用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python笔记:第四章使用字典

    说白了就是键值对的映射关系 不会丢失数据本身关联的结构,但不关注数据的顺序 是一种可变类型 键的类型:字典的键可以是任何不可变的类型,如浮点数,字符串,元组 可以从其他映射或键值对创建字典 将字符串格式设置功能用于字典 使用format_map将两者结合起来 就地

    2024年02月13日
    浏览(28)
  • 西瓜书学习笔记---第四章 决策树

    目录 一、题目要求 二、数据集介绍  三、决策树模型 3.1 决策树模型介绍 3.2 决策树算法原理 3.2.1 决策树的建立 3.2.2 决策树的划分(1)—信息增益ID3 3.2.3 决策树的划分(2)—Gini指数CART 3.2.4 预剪枝pre-pruning 3.2.5 后剪枝post-pruning 3.3 决策树算法核心代码解释 四、运行结果

    2024年02月04日
    浏览(31)
  • 操作系统-笔记-第四章-文件管理

    一、第一章——操作系统的概念 二、第二章——【进程】 二、第二章——【线程】​编辑 二、第二章——【进程调度】 二、第二章——【进程同步与互斥】 二、第二章——【锁】 三、第三章——内存管理 四、第四章——文件管理 五、第五章——输入输出管理 🚀 学习心

    2024年02月11日
    浏览(32)
  • 计算机网络-笔记-第四章-网络层

    一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 ​​​​​​​ 四、第四章——网络层 1、网络层概述 (1)虚电路服务——面向连接 (2)虚电路服务——无连接

    2024年02月11日
    浏览(35)
  • JAVA学习笔记——第四章 运算符

    🔥 博客主页 : A_SHOWY 🎥 系列专栏 :力扣刷题总结录 数据结构  云计算  数字图像处理  力扣每日一题_ 运算符是一种特殊的符号,用于表示数据的运算、赋值和比较 取模 %的本质: a - (int)a / b * b//当a是小数时 自增 独立语句使用时,++i和i++没有区别的。但是如果作

    2024年01月20日
    浏览(47)
  • 西瓜书读书笔记整理(五)—— 第四章 决策树

    4.1.1 什么是决策树算法 决策树算法 是一种通过构建 树形结构 进行分类和回归的机器学习算法。 决策树由结点 (node) 和有向边 (directed edge) 组成。结点有两种类型:内部结点 (internal node) 和叶结点 ( leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。 4.1.2 决策树学习

    2024年02月13日
    浏览(33)
  • 【UnityShader入门精要学习笔记】第四章(5)坐标空间

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年01月21日
    浏览(30)
  • 计算机网络(王道考研)笔记个人整理——第四章

    主要任务:把 分组 从源端传到目的端,为分组交换网上的不同主机提供通信服务。 传输单位:数据报 功能 路由选择和分组转发(最短路径) 异构网络互联 拥塞控制:若所有结点来不及接收分组,而要丢弃大量分组,则处于拥塞状态。因此要采取一定措施缓解拥塞。解决方

    2024年04月14日
    浏览(37)
  • 【UnityShader入门精要学习笔记】第四章(2)点和向量

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年01月17日
    浏览(52)
  • 【UnityShader入门精要学习笔记】第四章(3)矩阵的性质

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包