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

湖北智能建站系统价格工信部网站备案查询验证码错误

湖北智能建站系统价格,工信部网站备案查询验证码错误,成品app直播源码推荐,无锡高端网站开发喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.4.1. Drop trait的意义 类型如果实现了Drop trait,就可以让程序员自定义当值…

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
请添加图片描述

15.4.1. Drop trait的意义

类型如果实现了Drop trait,就可以让程序员自定义当值离开作用域时发生的操作。例如文件、网络资源的释放等。

在某些语言中(比如C/C++),对于某些类型,程序员每次使用完这些类型的实例时都必须写代码来释放内存或资源。如果忘记了,系统可能会过载并崩溃。在Rust中,程序员可以指定每当值超出范围时运行特定的代码,编译器将自动插入此代码。

任何类型都可以实现Drop trait,而Drop trait只要求实现drop方法,其参数是对self的可变引用。Drop trait在预导入模块(prelude),所以说使用它时不需要手动地引入。看个例子:

struct CustomSmartPointer {data: String,
}impl Drop for CustomSmartPointer {fn drop(&mut self) {println!("Dropping CustomSmartPointer with data `{}`!", self.data);}
}fn main() {let c = CustomSmartPointer {data: String::from("my stuff"),};let d = CustomSmartPointer {data: String::from("other stuff"),};println!("CustomSmartPointers created.");
}
  • 结构体CustomSmartPointer下有data字段,为String类型。
  • 通过impl Drop for CustomSmartPointerCustomSmartPointer实现了Drop trait。在其里面实现drop方法,参数是&mut self。这个方法通常是用于释放资源的,但出于演示的目的,这个方法里就只打印了一句话,把self里的data字段的数据打印出来。
  • main函数里创建了两个CustomSmartPointer的实例:c存的是"my stuff",d存的是other stuff。最后打印"CustomSmartPointers created."。

输出:

CustomSmartPointers created.
Dropping CustomSmartPointer with data `other stuff`!
Dropping CustomSmartPointer with data `my stuff`!

程序会先打印main函数的println!的内容,也就是"CustomSmartPointers created."。由于cd走出作用域都在第19行花括号后,所以程序接着会分别对cd调用drop函数。在实现Drop trait时定义的drop函数是打印一句话,所以这里cd就会分别打印一句话。

15.4.2. 使用std::mem::drop来提前drop

比较遗憾的是,我们很难直接禁用自动的drop功能,也没必要。因为Drop trait的目的就是进行自动的释放处理逻辑。

此外,Rust不允许手动调用Drop trait的drop方法。但是可以调用标准库的std::mem::drop函数来提前drop值,相当于提前调用了Drop trait的drop方法,它的参数是要丢弃的值。看个例子:

struct CustomSmartPointer {data: String,
}impl Drop for CustomSmartPointer {fn drop(&mut self) {println!("Dropping CustomSmartPointer with data `{}`!", self.data);}
}fn main() {let c = CustomSmartPointer {data: String::from("my stuff"),};let d = CustomSmartPointer {data: String::from("other stuff"),};drop(c);println!("CustomSmartPointers created.");
}

main函数中手动使用drop函数把c清理掉,而d还是自动清理的,这个时候的输出顺序应该是cd前。

输出:

Dropping CustomSmartPointer with data `my stuff`!
CustomSmartPointers created.
Dropping CustomSmartPointer with data `other stuff`!

这里有些人可能会提出疑问:c在走出作用域之前就被释放了,那么在走出作用域后编译器会不会再调用一次drop方法导致二次释放(double free)的错误呢?答案是不会,Rust的设计很安全,它的所有权系统会保证引用的有效,而drop也只会在确定不再使用这个值时被调用1次。

http://www.yayakq.cn/news/54345/

相关文章:

  • 合肥网站营销推广网站开发技术课程报告
  • 网站建设开发案例教程视频教程网站动态和静态
  • 北京市网站开发沈阳好的男科医院是哪一家
  • 做网站app的工资高吗sticklr wp wordpress
  • php众筹网站程序源码汕头站扩建
  • tp5网站开发模板wordpress带支付主题
  • 福州建设厅官方网站微信app下载安装旧版本
  • 做网站大概要自在威海智慧旅游平台app
  • wordpress建站服务器选择jsp 网站开发
  • 谷歌seo网站优化网站后台需要ie6修改
  • 营销型网站建设总结python怎么做视频网站
  • 空间域名主机网站模板企业网站建设公司哪家好
  • 邯郸教育平台网站建设清空wordpress
  • 网站建设 镇江wordpress数据库导出工具
  • 太原站建设有多长时间免费个人网址
  • 个体户可以网站备案吗wordpress 主题制作 functions.php
  • 公司网站开发费用如何入账xampp wordpress 建站教程
  • 丹阳网站怎么做seo商户 wordpress
  • 什么网站个人可以建设wordpress 简码大全
  • 网站镜像 动态企业品牌营销策略
  • 企业网站策划方案书加气站类型的网站建设
  • 物流公司网站怎么做杭州建设厅特种作业证
  • 网站运营学习长春网站优化指导
  • 建一个自己的网站需要多少钱上住房和城乡建设部网站
  • 做网站需要注意的建设银行网站怎么预约纪念币
  • 做网站个人三五互联网站建设怎么样
  • 公司手机网站模板免费下载无为教育网站
  • 网站建设年终总结怎么写河北seo网络优化培训
  • 广东省城乡住房建设厅网站首页网站不做备案
  • 网站广告动图怎么做网站排名软件推荐