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

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

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

  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中做了详细的对比;表4.2

  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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

位姿估计 | 空间目标位姿估计方法分类总结

目录 前言位姿估计方法分类一、传统位姿估计方法1. 基于特征的位姿估计2. 基于模型的位姿估计 二、深度学习位姿估计方法 总结 前言 本文接着分享空间目标位姿跟踪和滤波算法中用到的一些常用内容&#xff0c;希望为后来者减少一些基础性内容的工作时间。以往分享总结见文章&a…

KW 新闻 | KaiwuDB 受邀亮相 IOTE 2023 第十九届国际物联网展

5月17日&#xff0c;IOTE 2023 第十九届国际物联网展在上海拉开序幕&#xff0c;全球超过 350 家参展企业到场展示先进的物联网技术和产品&#xff0c;行业专家、领军企业代表等人物齐聚一堂&#xff0c;共话 IoT 未来趋势。KaiwuDB 受邀亮相参展并就《工业物联网产业数字化转型…

剑指 Offer 30: 包含min函数的栈

这里用到了java中的Stack,和别的方法一样&#xff08;LinkedList&#xff09;&#xff0c;也是先使用Stack带上类型&#xff08;这里是<Integer>&#xff09;声明&#xff0c;然后再new出来。 这里需要的返回值是int&#xff01;&#xff01;&#xff01; 这里千万要注意…

SQLServer2017安装教程

一、安装包下载地址&#xff1a; https://download.csdn.net/download/u011152234/87898714 二、软件安装 1、双击“SQLEXPR_x64_CHS.exe”将文件提取在指定文件中。 2、 右击“SETUP.EXE”以“管理员身份运行” 3、选择全新安装模式继续安装 4、在协议中&#xff0c;点击同…

入驻京东MCN机构详细流程

京东MCN机构可以为京东平台提供更专业的运营和管理服务&#xff0c;通过对UP主的培训和管理&#xff0c;提高UP主的创作水平和内容品质&#xff0c;从而提高平台的服务质量和用户体验&#xff0c;京东MCN机构可以通过与京东平台的合作&#xff0c;优化平台生态&#xff0c;提高…

Java RabbitMQ API 对接说明

1.背景 最近研发的物联网底层框架使用了RabbitMQ作为消息队列&#xff0c;如果监控消息队列对其通道是否出现阻塞能够及时获知与让管理员收到预警并及时处理&#xff0c;这里我们会采用RabbitMQ的rabbitmq_management插件。利用其提供的API进行获取信息&#xff0c;从而实现队…

【Python实战】Python采集王者最低战力信息

前言 王者新赛季马上就要开始了&#xff0c;大家都开始冲榜了&#xff0c;准备拿一个小省标&#xff0c;那么&#xff0c;本文&#xff0c;就来练习获取各地最低战力的爬虫采集实战。 环境使用 python 3.9pycharm 模块使用 requests 模块介绍 requests requests是一个很实用…

都说软件测试简单,我怎么没有感觉呢?

前言 软件测试到底难不难&#xff1f;试试就知道了。 经常听想入行的朋友说&#xff1a; 我想转软件测试&#xff0c;听说软件测试很简单。 这时我的心里就呵呵了&#xff0c;谁说软件测试简单了&#xff0c;你知道吗&#xff1f;测试工程师要会的&#xff0c;要了解的东西比…

电力vr智能巡检模拟实操教学灵活性高成本低

传统电力智能运检服务培训采用交接班期间开展智能带电检测仪器的操作培训&#xff0c;教学时间、场地及材料有限&#xff0c;有了VR技术&#xff0c;将推动电力智能运检服务培训走向高科技、高效率和智能化水平。 深圳华锐视点凭借着对VR实训系统的深入研发和升级&#xff0c;多…

asp.net 框架开发的LIMS实验室信息管理系统源码

LIMS实验室信息管理系统源码 通过互联网实验室的管理模式&#xff0c;结合实验室硬件设备&#xff0c;将实验室的项目、设备、耗材、人员等结合到软件上管理&#xff0c;利用计算机网络技术、数据存储技术 、快速数据处理等&#xff0c;对实验室进行全方位的管理&#xff0c;帮…

web接口测试之GET与POST请求

目录 前言&#xff1a; GET请求 POST请求 前言&#xff1a; Web接口测试中最常见的请求方法是GET和POST&#xff0c;它们构成了大部分的Web API请求。在接口测试开发过程中&#xff0c;了解它们的原理、特点和应用场景是非常重要的。在本文中…

抖音电商发展路径:从外链种草到达人/品牌直播

复盘抖音电商发展&#xff0c;可以总结出以下几点发展特征&#xff1a; 策略重心的变化 以种草为核心&#xff0c;给电商引流站外成交&#xff08;2019 年及之前&#xff09;→ 力推达人直播但效 果一般&#xff08;2020 上半年&#xff09;→ 推品牌自播并彻底闭环&#xff0…

postgres 简单导入导出sql脚本

postgres 简单导入导出sql脚本 导出 backup选择类型 导入功能 导出 backup 选择类型 右键点击backup&#xff1a; 成功导出sql 数据文件 导入功能 cd 进入 Postgres 安装目录进入bin目录下执行一下命令 psql -d ${database_name} -h localhost -p 5432 -U postgres -f C:\…

成功案例丨借助Facebook运营海外市场的企业策略

在当今数字化时代&#xff0c;企业在拓展海外市场和赢得全球消费者的竞争中&#xff0c;社交媒体平台扮演了重要角色。其中&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;为众多企业提供了成功进军海外市场的机会。 Poppy & Finch&#xff08;虞姬家&…

创建合同pdf操作整理

使用TCPDF对合同的模板创建、盖章、水印、骑缝章、设置保护等操作。 目录 合同模板处理 创建html模板 模板赋值 创建目录 创建blade合同模板 变量改活 获取html内容 创建pdf文件 盖章处理 骑缝章处理 获取总页数 分割印章 设置骑缝章 水印设置 简单水印 每页水…

Jenkins部署报错问题:已解决

一.Jenkins不能下载插件 报错sun.security.provider.certpath.SunCertPathBuilderException sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.provider.certpath.SunCertPathBuild…

学习英语给你带来了哪些机会?

昨天文章发出后&#xff0c;J姐姐给予了一些更正&#xff0c;我希望将来也能够像她那样走出去看一看。 Y呢&#xff0c;并不是我说的那样混日子&#xff0c;了解更多之后&#xff0c;才发现他是个王者&#xff0c;顿时肃然起敬。 “一起学英语”群里大佬云集&#xff0c;希望他…

【MySQL】一文带你了解SQL

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…

《嵌入式系统设计师教程 (第2版)》学习笔记

嵌入式系统设计师教程 (第2版).pdf》链接&#xff1a;https://download.csdn.net/download/AnChenliang_1002/87864728 该资源在上传时涉及到版权问题无法上传&#xff0c;所以保留该资源仅为了日后查看时博主自己可以下载&#xff1b; 本文用来记录在学习《嵌入式系统设计师…

三亚旅拍及游玩

可选景点 ⬇️①蜈支洲岛&#xff1a;各种各样的海上项目都有&#xff0c;海岛很美&#xff0c;被称作中国马尔代夫&#xff08;144元&#xff09; ⬇️②后海村&#xff1a;很适合新手学习冲浪&#xff08;免费&#xff09; ⬇️⑤西岛&#xff1a;一座安静的文艺小岛&…