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

网站页面设计模板图片网络项目计划书

网站页面设计模板图片,网络项目计划书,无备案网站如何赚钱,连云港住房和城乡建设厅网站所有权系统是Rust敢于声称自己为一门内存安全语言的底气来源#xff0c;也是让Rust成为一门与众不同的语言的所在之处。也正是因为这个特别的所有权系统#xff0c;才使得编译器能够提前暴露代码中的错误#xff0c;并给出我们必要且精准的错误提示。 所有权系统的三个规则…所有权系统是Rust敢于声称自己为一门内存安全语言的底气来源也是让Rust成为一门与众不同的语言的所在之处。也正是因为这个特别的所有权系统才使得编译器能够提前暴露代码中的错误并给出我们必要且精准的错误提示。 所有权系统的三个规则 每个值都有一个所有者内存中不可能存在一个没有所有者的值一个值只有一个所有者 没有变量可以共享一个值的所有权其他变量可以借用这个值但只有一个变量可以拥有它如果某个值的所有者超出了它的作用域这个值也会立刻从内存中被抹去 所有权的移动 情景A 让我们用示例来说明上面的文字 let s1 String::from(abc); let s2 s1; println!({}, s1); // Error!上面的例子中 我们创建了一个字符串变量s1, 然后创建了另一个变量s2, 并将s1的值赋给它。 此时 在Rust内存中发生的事并不是进行了一次值拷贝 而是把s1的值移动给了s2, s1不再有值 因为只有一个变量可以拥有该值。如果我们在进行了上面的操作之后尝试继续使用s1, 就会出现编译器错误: 让我们从内存的角度来看看上面的代码发生了什么 首先创建一个变量s1, 上一章讲解字符串的内容中说到了 String类型的数据结构由指针长度 容量三部分组成这三部分数据被压入栈中。在堆中创建了值abc, s1的指针指向堆中值所在的地址 然后再创建s2, s2的指针 长度 容量都会从s1复制并作为一个新的变量被压入栈中。 如果到此为止 s1和s2的指针就都指向了同一个内存地址这样一来内存安全就不复存在了 因此Rust会使s1立即失效。 编译器现在会认为s1是一个已声明但是未被初始化的变量因此是不能被使用的。如果s1被声明为一个可变的变量理论上我们还是可以再次对它进行赋值并使用的。但是在上面的代码中我们没有使用mut关键字声明它为可变因此s1始终是不可变的他的值被移动给s2后 s1就只是一个垃圾不能再被使用了。 如果我们不想移动s1的值而是真的想要拷贝一份呢那可以使用clone()函数 let s1 String::from(abc); let s2 s1.clone(); println!({}, s1); // Error!clone()函数在内存中的行为也与值的移动不同 不仅在栈中会复制一个变量 在堆中也会复制一份相同的数据并调整新变量的指针指向新复制的数据地址。 在Rust中 copy一般认为是在栈中进行的复制clone一般认为涉及堆数据及指针更新 在其他语言中可以分别对应浅拷贝和深拷贝。 当变量超出作用域时会被立即销毁从内存堆栈的角度看销毁意味着三件事 析构函数立即执行(如果有的话)堆中的数据被立即删除栈中的数据立即弹出 因此不会存在内存泄漏悬空指针这样的问题。 情景B let s1 String::from(abc); do_stuff(s1); println!({}, s1); // Error! s1 的值的所有权被移动到了do_stuff的局部变量s中fn do_stuff(s: String) {// do stuff }上面的代码中我们创建了一个String类型的变量s1 然后创建了一个接受字符串参数但不返回任何内容的函数。如果我们将s1作为参数传递给该函数 s1的值的所有权将被移动到do_stuff函数中的局部变量s 中 这就意味着s1将失去对其值的所有权而不能再继续被使用了。那如果我们还想继续使用s1呢可能会想到这样做 let mut s1 String::from(abc); s1 do_stuff(s1); println!({}, s1); fn do_stuff(s: String) - String {s }让s1声明为一个可变变量 让函数返回一个String类型的值并重新赋值给s1。 看起来是解决了问题但是总是感觉画蛇添足怪怪的样子。跳出代码想一想这个问题 通常我们将变量传入函数无非是想要使用这个值 而其实使用这个值并不一定需要将值的所有权传递给函数在下一章中我们会讨论引用与借用这将解决我们的这种需求。 小结 本章介绍了Rust的所有权系统的规则与示例接下来会讲解Rust中的引用与借用。
http://www.hkea.cn/news/14528688/

相关文章:

  • 嵊州做网站深圳本地招聘网站
  • 秦皇岛抚宁区建设局网站学习建设网站开发app
  • 松江工业区网站建设网站开发 强制兼容模式
  • 凡科网站模板下载二维码转链接在线生成器
  • 网站建设90g 吾爱破解公司建设电商型网站的作用
  • 做查询网站有哪些公众号管理平台入口
  • 分析苏宁易购网站内容建设wordpress 超级精简
  • 网站制作岗位职责比较漂亮的营销型网站
  • 了解互联网 网站新东方小吃培训价格表
  • 网站制作专业做外贸流程详细步骤
  • 知名网站开发贵州做网站的
  • 网站如何生成静态页面asp做的网站如何更新
  • 门头沟网站建设网站建设方案书模板 备案
  • 为网站的特色功能设计各种模板南京网站制作系统
  • 大庆工程建设公司网站什么网站做跨境电子商务
  • 佛山网站建设联系电话百度有刷排名软件
  • 大连网站的优化如何得到网站后台权限
  • 网站推荐你懂我的意思吧知乎wordpress在线题库
  • 北京seo网站设计深圳建设企业网站公司
  • seo黑帽优化湖南专业seo优化公司
  • 专业做能源招聘的网站wordpress php 5.2
  • 山东岩海建设资源有限公司网站wordpress下载连接插件
  • 个人网站建设规划案例中国建设学会查询网站
  • 科普重庆网站wordpress移动顶部菜单
  • 微网站收费标准杭州鼎易科技做网站太坑
  • 苏州网站定制公司哪家好网站自己怎么做的
  • 工程建设信息网站网站建设 swot分析
  • 营销型外贸网站建设公司wordpress 登陆id
  • 虚拟主机销售网站源码龙岩kk网最新招聘
  • 网站如何看是哪家公司做的网页版抖音入口