RUST 所有权---内存安全

2023-10-27

请谨记这些规则:

1. Rust 中的每一个值都有一个被称为其 所有者(owner)的变量。

2. 值有且只有一个所有者。

3. 当所有者(变量)离开作用域,这个值将被丢弃。

移动(MOVE)语义:

1 一个变量可以把他拥有的值转移给令一个变量,称为“所有权转移”。赋值语句,函数调用,函数返回等,都有可能导致所有权转移。

2 Rust中的变量绑定操作,默认是move语义,执行了新的变量绑定后,原来的变量就不能再被使用了。

复制(Copy,Clone)语义:

1 实现了Copy,Clone trait的类型,赋值都是走复制语义的。

Box类型

1 Box类型是Rust中常用的指针类型。它代表“拥有所有权的指针”

2 Box类型永远执行的是Move语义。

借用:

变量对其管理的内存拥有所有权。这个所有权是可以借用(borrow)的.

借用指针的语法 &(只读借用) 或者 & mut(可读写借用).

借用规则:

1 借用指针不能比它指向的变量存在的时间更长。

2 &mut型借用只能指向本身具有mut修饰的变量,对于只读变量,不可以有&mut型借用。

3 &mut型借用指针存在的时候,被借用的变量本身会处于"冻结"状态。

4 如果只有&型借用指针,那么可以同事存在多个;如果是&mut型,那么只能存在一个;如果同事有其他&或者&mut型借用指针,那么会出现编译错误。

生命周期标记:

1 生命周期符号使用单引号开头,后面个一个合法的名字。生命周期标记和发行类型参数是一样的,需要先声明后使用。

2 生命周期之间有重要的包含关系。如果生命周期 'a 比 'b 更长或相等,则标记炜 'a: 'b,意思是 'a 至少不会比'b短。

3 'static是一个特殊的生命周期,它代表的是这个程序从开始到结束的整个阶段,所以它比其他任何生命周期都长。

生命周期自动补全规则:

1 每个带生命周期参数的输入参数,每个对应不同的生命周期参数。

2 如果只有一个输入参数带生命周期参数,那么返回值的生命周期被指定炜这个参数;

3 如果有多个输入参数带生命周期参数,但其中有&self, &mut self,那么返回值的生命周期被指定为这个参数;

4 以上都不满足,就不能自动补全返回值的生命周期参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RUST 所有权---内存安全 的相关文章

随机推荐

  • Apache

    看到这个有没有想到阿帕奇 武装直升机 显然他不是呀 下面让我们一起了解一下Apache吧 一 概述 Apache是一个开源的 多平台 可扩展的Web服务器软件 它由Apache软件基金会开发和维护 目前是互联网上使用最广泛的Web服务器软件
  • 多台群晖实现按计划WOL网络自动唤醒数据冷备份

    几年前买了2盘位的DS218 但是随着照片的增加已经不够用 年中购入了4盘位的群晖DS923 2块16T西数数企业级硬盘 1块2T intel企业级 SSD 1 什么是冷备份 冷备是离线备份 备份好的数据可以单独存取 定期冷备可以保证数据安
  • 浅谈初次做外包项目及背后的思考

    谈起外包经历 我的第一次外包源自前两年某天陪着女友逛商场时 接到一个朋友的电话 朋友兴高采烈地跟我介绍一个大项目 需求不多 钱不少 难度不大 口气不小 我一听心动了 原以为要赚一笔 easy money 后面再看看 这次外包踩了大大小小不少
  • 手撕哈希表(HashTable)——C++高阶数据结构详解

    目录 传统艺能 概念 哈希碰撞 哈希函数 解决哈希冲突 闭散列 开散列 闭散列实现 数据插入 数据查找 数据删除 开散列实现 插入数据 查找数据 数据删除 利用素数来规定哈希表大小 实现方案 传统艺能 小编是双非本科大一菜鸟不赘述 欢迎米娜
  • 镜头选型——景深计算

    正在上传 重新上传取消 1 概述 先看两个例子 拍摄花 昆虫等照片时 背景拍的比较模糊 突出被拍物 但当拍摄纪念照 风景等照片时 却会把背景拍摄得和被拍对象一样清晰 这两者就是不同景深 前者为浅景深 拍摄聚焦到被拍物上 只能拍清一小段距离
  • JavaScript let 和 const

    在JavaScript中 let 和 const 是用于声明变量的关键字 let 关键字用于声明一个块级作用域的变量 块级作用域是指在一个代码块 通常是在花括号 内部 中声明的变量只在该代码块内部有效 例如 javascript funct
  • MATLAB使用Simulink 进行建模与仿真方法 - Simulink基本操作与入门教程

    Simulink 是 MATLAB 很强大的功能组件 广泛用于系统建模 仿真和分析 下面分享给大家MATLAB使用Simulink 进行建模与仿真方法 步骤 希望能够帮助大家 1 工具 原料 电脑 MATLAB及Simulink 组件 MA
  • 对于产业互联网参与者来讲,只需要重构穿传统意义上的生产关系即可

    消费互联网模式的固定思维 让玩家们想当然地认为 所谓的产业互联网 仅仅只是一种重构生产关系的过程 对于产业互联网的玩家们来讲 他们只需要重构穿传统意义上的生产关系即可 正是在这样一种思维的影响之下 我们才看到了以新零售为代表的诸多看似新物种
  • 2023最新版本Activiti7系列-网关服务

    网关篇 网关可控制流程的执行流向 常用于拆分或合并复杂的流程场景 在Activiti7中 有以下几种类型的网关 排他网关 Exclusive Gateway 用于在流程中进行条件判断 根据不同的条件选择不同的分支路径 只有满足条件的分支会被
  • 使用python读取gif,合并gif,视频转换为gif

    一 将视频转换为gif 采用opencv读取gif图并使用imageio转换 import cv2 import imageio def read video video path video cap cv2 VideoCapture vi
  • centos7 从python 2.7升级到python 3.6

    1 检查之前系统的python版本 root localhost python Python 2 7 5 default Apr 2 2020 13 16 51 GCC 4 8 5 20150623 Red Hat 4 8 5 39 on
  • VanillaNet实战:使用VanillaNet实现图像分类(一)

    文章目录 摘要 安装包 安装timm 安装 grad cam 数据增强Cutout和Mixup EMA 项目结构 计算mean和std 生成数据集 摘要 论文翻译 https blog csdn net m0 47867638 articl
  • 深圳市科技创新委员会关于2021年高新技术企业培育库拟入库企业名单公示的通知

    根据 深圳市高新技术企业培育资助管理办法 深科技创新规 2021 5号 有关要求 2021年高新技术企业培育库入库申请企业中 符合以下条件的企业获得入库资格 1 未获得过高新技术企业资格 2 未获得过高新技术企业培育库入库资格 3 符合市科
  • UE4中Cesium插件使用(一)

    一 前提条件 UE4 引擎4 26 及以上 Cesium账号 在官网注册 二 添加插件 UE4 4 26自带 下载插件 1 打开UE4引擎界面在插件设置页面 搜索cesium 点击启用 然后重启UE4 2 如果在插件列表搜不到cesium插
  • pycharm安装过程中激活方法(最方便)

    本人新手 在学习python时选择用pycharm来使用 因为下载的是专业版 所以要激活 在网上找了好多激活码和License server 结果发现都被封了 下面介绍一种最简单无脑的方法 亲测有效
  • 3个技术男搞恋爱版 ChatGPT,估值70亿...

    过去几个月 我们见证了GPT从3 5到4 0 从只能做结构化搜索整合到接近人类思维的对话 我们还看到了 GPT逐步掌握画画 写作 剪辑 制表 做 PPT 等技能 最可怕的是AI的迭代速度 简直是一天一个样 这股这股前所未有的技术浪潮 一时间
  • 通信原理实验指导书_通信原理实验——SystemView的安装与使用

    一 SystemView的安装
  • Stable Matching-稳定匹配问题【G-S算法,c++】

    Stable Matching 稳定匹配问题 G S算法 c 题目描述 Gale Shapley算法 解题思路一 G S算法 Gale Shapley算法 题目描述 Gale Shapley算法 Teenagers from the loc
  • c编程:输入一个字符串,求出字符串的最后一个字符,如果是空字符串则返回空字符。

    编写一个函数 函数说明为 char lastchar char str 功能 求一个字符串的最后一个字符 如果是空串 则返回空字符 再利用该函数编程 输入两个字符串 输出第一字符串的最后一个字符和第二个字符串的最后一个字符 include
  • RUST 所有权---内存安全

    请谨记这些规则 1 Rust 中的每一个值都有一个被称为其 所有者 owner 的变量 2 值有且只有一个所有者 3 当所有者 变量 离开作用域 这个值将被丢弃 移动 MOVE 语义 1 一个变量可以把他拥有的值转移给令一个变量 称为 所有