当前位置: 首页 > news >正文

【rust】| 06——语言特性 | 所有权

系列文章目录
【rust】| 00——开发环境搭建
【rust】| 01——编译并运行第一个rust程序
【rust】| 02——语法基础 | 变量(不可变?)和常量
【rust】| 03——语法基础 | 数据类型
【rust】| 04——语法基础 | 函数
【rust】| 05——语法基础 | 流程控制
【rust】| 06——语言特性 | 所有权

文章目录

  • 1. 所有权的概念
  • 2. 所有权的规则
  • 3. 变量的作用域
  • 4. 所有权的移动

1. 所有权的概念

 所有权是Rust语言中一个关键的特性。它是一种内存管理规则(机制)。它通过这个规则(即所有权系统)结合编译器对代码进行检查 从而确保内存安全。
 在其他语言如C/C++ 等 都有自己的内存管理方式。C/C++需要我们显式(手动)处理所用的内存(申请、释放) 如果处理不当会造成很严重的内存安全问题。而Rust中这一特性很好的可以帮我们确保内存安全性。

2. 所有权的规则

1、每个值都对应一个变量 owner (可以理解为每个值会有一个管理 叫owner)
2、一个值只能有一个 owner
3、有作用域,当owner超出作用域 值会被销毁 (可以理解为 这个管理权限有限)

3. 变量的作用域

Rust中变量的作用域和其他语言类型。比如函数体内的 变量(局部变量) 它的作用域在 函数大括号之间 生命周期也是这么短。
在这里插入图片描述
可以看到 超过范围销毁了。 对应所有权规则的最后一条。owner 就是这个值藏在暗处的变量名。 它超过变量作用域会消失。Rust内部在超出后 会掉清理函数 drop
清理变量占用的内存。

4. 所有权的移动

我们通过代码例子去理解

1、变量赋值操作

在这里插入图片描述
分析:
  1、整型变量赋值 变量a 复制到了 变量b
  2、字符串赋值 变量s1 复制到了 变量s2
  我们可以看到 两种不同的类型 操作几乎是一样的。 整型它只是一个数字 再怎么复制占用的大小就那么多 无关紧要。可是当是一个很大的字符串 复制给另一个变量 那所占用的大小(很大*2) 这样的操作 太占用大小 咋的一个字符串准备要我命啊。是不是和其他语言复制操作很类似。
  但是在 Rust中 复制的操作 还是有细微差别的 我们深入了解下rust下 具体复制的具体过程

细看 字符串变量的定义及复制到其他变量的过程

在这里插入图片描述
可以看到 字符串变量的内容 hello 存储在堆上 而 定义的变量 S1 只保存了 指向堆上内容的指针、长度和容量这三个 这些内容存储在栈上。并没有将 字符串内容也保存。
下面我们看 S1内容复制给S2 是怎样的
在这里插入图片描述
可以看到 S1 复制到 S2 也只是复制了 指针、长度、容量三件套。不重复复制堆上内容。这样的情况下S1 S2是不是 占用栈大小很少。

如果S1 S2把数据一起保存呢
在这里插入图片描述
可以看到 全保存过来 每个变量 都这样完全复制 那栈吃不消。当内容很大时 是不是 一个赋值操作直接给 栈空间 用完 干废掉啦。

通过上面图我们可以看到 rust中 变量保存了指向内容的指针等。 S1 和S2 中的指针都指向了 数据内容。我们知道所有权规则之一 变量超出作用域 会没了。那么当S1和S2 超出作用域 会尝试释放 因为它两指向一个地址那么 两次释放是不是会出大问题呢。也称为 双重释放错误。
当然 rust中也会想到这种错误 所以它会避免啦。
在这里插入图片描述

在这里插入图片描述
在Rust中 执行完 S2=S1这样的操作 S1已经变得无效啦 所以不会再存在上面双重释放的隐患了。
其实 Rust中S2 = S1 的操作类似浅拷贝 只拷贝了指针长度容量。但是rust 中超出范围 让其消失的规则 即S1 无效啦的操作 我们把这样称为 移动

相关文章:

【rust】| 06——语言特性 | 所有权

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础 | 变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 【rust】| 06——语言特…...

AUTOSAR入门

简介 AUTOSAR(AUTomotive Open System ARchitecture)是一种汽车软件架构标准,由德国大陆、博世、宝马等汽车及零部件制造商共同发起,拥有广泛的行业参与。其目标是为了解决汽车电子和软件系统日益复杂的问题,提高可重…...

运维高可用架构的 6 大常规方案

在介绍高可用架构的方案之前,先说一下什么是高可用架构,高可用架构应具备但不限于以下特征: 主从切换 很好理解,当其中一台机器的服务宕机后,对于服务调用者来说,能够迅速的切换到其他可用服务,…...

Java设计模式-桥接模式

简介 桥接模式(Bridge Pattern)是一种结构性设计模式,它的主要作用是将抽象部分和实现部分解耦,使它们可以独立变化而不会互相影响。桥接模式最早由GoF(Gang of Four)提出,在《设计模式》一书中…...

计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

欧拉函数详解

文章目录 欧拉函数定义性质计算公式求某个数欧拉函数值线性筛求区域内欧拉函数 欧拉函数 定义 在[1,n]的范围内所有与n互质的数字的个数。 我们用 φ ( n ) \varphi(n) φ(n)来表示数字n的欧拉函数的值,例如: φ ( 4 ) 2 \varphi(4)2 φ(4)2&#xf…...

手把手教你如何将安卓手机数据导入iPhone!【详解】

案例:安卓数据导入苹果手机 【大神们,刚换了新的苹果手机,原本的安卓手机数据怎么导入新手机?】 想要换用iPhone,但是又不想丢失安卓手机里的重要数据怎么办?如何将安卓手机数据导入iphone?本文…...

怎么轻松地搞定Win11系统备份任务?

“我是一个电脑小白,不是很懂电脑的一些操作。我刚买了一台新电脑,它装的是Win11系统,我害怕它出现什么问题,听朋友说可以通过备份的方法保护系统,这是真的吗?有谁知道该怎么进行Win11系统备份吗&#xff1…...

MySQL集群

目录 主从复制 主从复制流程: 为什么要有relay log中继日志? 为什么要有主从复制,好处? 实际生产环境中。如果对MySQL数据库的读写都在一台数据库服务器中操作,无论是再安全性、高可用性,还是高并发性等…...

关于Kerberos认证的一些攻击手法学习总结

Kerberos认证流程 前言 本文主要分享最近学习的关于域内Kerberos认证的一些攻击手法,以自我的理解为主,从原理理解切入到基本工具利用来阐述,个人的理解分析较为啰嗦,嫌太兀长的可以跳着看就好,还请各位谅解。如有错误…...

STL-deque容器

双端数组,可以对头端进行插入删除操作 deque 容器和 vecotr 容器有很多相似之处,比如: deque 容器也擅长在序列尾部添加或删除元素(时间复杂度为O(1)),而不擅长在序列中间添加或删除元素。deque 容器也可…...

❤ go语言和java语言的优缺点

❤ go语言和java语言的优缺点对比 对比GOJAVA介绍Java是一种流行的面向对象的编程语言,它的语法类似于C,并且具有丰富的类库和工具。Java的可移植性很好,可以在多种平台上运行。Go是一种新兴的编程语言,它比Java更加简洁和易学&a…...

安全成就未来|Fortinet Accelerate 2023·中国区巡展首站启幕

Fortinet Accelerate 2023中国区巡展 年度网络安全盛会 Fortinet Accelerate 2023中国区巡展,昨日在深圳拉开帷幕,开启15城巡展的“首城之站”。本年度巡展主题“安全成就未来”,Fortinet与中企通信、亚马逊云科技等生态合作伙伴&#xff0c…...

输入URL到显示界面的整个过程

以如下这个比较简单的网络拓扑模型作为例子,探究中间发生的整个过程: 1 HTTP 浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的请求信息。下图展示了一条长长的URL里各个元素代表什么: 所以整个长长的URL…...

BetaFlight飞控启动运行过程简介

BetaFlight飞控启动&运行过程简介 1. 源由2. 启动过程2.1 main(主程序)2.2 init (初始化)2.3 run 3. 任务调度3.1 任务定义3.2 scheduler (调度器) 4. 总结5. 参考资料6. 附录 -- 问题汇总6.1 Why desiredPeriodCycles is so …...

智能汽车实验二(视觉传感器标定)

实验二 视觉传感器标定(实验报告) 【实验目的】 1、了解开源图像处理库OpenCV的结构,掌握OpenCV的基本使用方法。 2、了解开源图像处理库OpenCV的基本模块功能,掌握常用图像处理方法。 3、掌握摄像机标定算法,学会使用…...

计算机网络:HTTP

目录 HTTP 是什么?HTTP 常见的状态码有哪些HTTP 常见字段有哪些参考资料 HTTP 是什么? HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。 1. 「协议」 「协」字,代表的意思是必须有两个以上的参与者。「议」字&…...

Go 语言接口

Go 语言接口 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。 实例 实例 /* 定义接口 */ type interface_name interface { method_name1 [return_type] method_name2…...

常用的intellij的快捷键

ctrlshiftspace(new 后面自动提示) ctrlshift/ (注释) itar后面tab (for循环) it后面ctrlj(很多智能代码生成) AltInsert(自动生成构造函数,get,set方法) ctrlaltt(自动生成try,catch) altenter(创建测试类和子类) ctrlshiftbackspace(最后编辑的地方) ctrl…...

Unity中的`SetPositionAndRotation()`

介绍 SetPositionAndRotation() 是Unity中的一个方法,用于同时设置物体的位置和旋转。它可以在不必分别调用 transform.position 和 transform.rotation 属性的情况下,直接设置物体的位置和旋转。 方法 以下是 SetPositionAndRotation() 方法的参数&a…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...