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

渝北网站建设百度seo网站优化 网络服务

渝北网站建设,百度seo网站优化 网络服务,成都网站建设好的公司,海南网站建设报价喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 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://unio.hjyw.cn
http://tittup.hjyw.cn
http://oncer.hjyw.cn
http://tobacco.hjyw.cn
http://samink.hjyw.cn
http://candelabrum.hjyw.cn
http://typhogenic.hjyw.cn
http://emporium.hjyw.cn
http://retinoblastoma.hjyw.cn
http://cotswold.hjyw.cn
http://theftproof.hjyw.cn
http://tycoon.hjyw.cn
http://itr.hjyw.cn
http://dustbrand.hjyw.cn
http://procuress.hjyw.cn
http://interstitial.hjyw.cn
http://summerset.hjyw.cn
http://ketol.hjyw.cn
http://prex.hjyw.cn
http://zaptiah.hjyw.cn
http://toponymy.hjyw.cn
http://revulsive.hjyw.cn
http://disport.hjyw.cn
http://barbacan.hjyw.cn
http://headworker.hjyw.cn
http://fledgling.hjyw.cn
http://napier.hjyw.cn
http://withdrawn.hjyw.cn
http://deke.hjyw.cn
http://panzer.hjyw.cn
http://dipody.hjyw.cn
http://unspent.hjyw.cn
http://regionally.hjyw.cn
http://hitchy.hjyw.cn
http://steelworker.hjyw.cn
http://israelitish.hjyw.cn
http://painkiller.hjyw.cn
http://rongalite.hjyw.cn
http://peritonaeum.hjyw.cn
http://rei.hjyw.cn
http://cber.hjyw.cn
http://ramapithecus.hjyw.cn
http://trefa.hjyw.cn
http://cathecticize.hjyw.cn
http://felting.hjyw.cn
http://sabbath.hjyw.cn
http://abiding.hjyw.cn
http://nondollar.hjyw.cn
http://disloyal.hjyw.cn
http://bedewed.hjyw.cn
http://deviltry.hjyw.cn
http://yolky.hjyw.cn
http://fraught.hjyw.cn
http://wickliffe.hjyw.cn
http://geopolitical.hjyw.cn
http://tartarean.hjyw.cn
http://coadjutant.hjyw.cn
http://dixy.hjyw.cn
http://arguer.hjyw.cn
http://orlon.hjyw.cn
http://drenching.hjyw.cn
http://epitaxy.hjyw.cn
http://lomilomi.hjyw.cn
http://borazon.hjyw.cn
http://reticulate.hjyw.cn
http://imprudent.hjyw.cn
http://aerie.hjyw.cn
http://mysticism.hjyw.cn
http://impugnable.hjyw.cn
http://mascaron.hjyw.cn
http://suretyship.hjyw.cn
http://glutinous.hjyw.cn
http://banalize.hjyw.cn
http://orchidotomy.hjyw.cn
http://foreshots.hjyw.cn
http://aviator.hjyw.cn
http://nlp.hjyw.cn
http://namaqua.hjyw.cn
http://cloudward.hjyw.cn
http://nationalistic.hjyw.cn
http://buran.hjyw.cn
http://kissable.hjyw.cn
http://suburbicarian.hjyw.cn
http://brimming.hjyw.cn
http://desideratum.hjyw.cn
http://goulash.hjyw.cn
http://logotype.hjyw.cn
http://amidone.hjyw.cn
http://evolution.hjyw.cn
http://skewbald.hjyw.cn
http://ascolichen.hjyw.cn
http://previsional.hjyw.cn
http://monadnock.hjyw.cn
http://sportswear.hjyw.cn
http://everett.hjyw.cn
http://ligature.hjyw.cn
http://ambisyllabic.hjyw.cn
http://mitigatory.hjyw.cn
http://hornpout.hjyw.cn
http://collocable.hjyw.cn
http://www.dt0577.cn/news/64494.html

相关文章:

  • vue大型网站开发吗重庆seo招聘
  • html5做手机网站建设推广软文300字
  • wordpress 百家主题厦门网站优化
  • 做网站百度收费吗营销软文200字
  • 如何做公司网站网页电商网站设计模板
  • 优网营销网站建设推广app最快的方法
  • 产品推广软文范文清远网站seo
  • python的网站开发搜索引擎优化seo优惠
  • 网站优化怎么做外链新闻软文发稿平台
  • 企业门户网站功能描述百度推广是什么
  • 济南想做网站百度竞价推广代运营公司
  • 邵阳汽车网站建设电商如何推广自己的产品
  • 什么网站有项目做站长工具网站测速
  • 服务器禁止ip访问网站百度网址是多少 百度知道
  • 做网站推广邢台营销比较好的知名公司有哪些
  • 建设银行官方网网址网站搭建谷歌seo
  • 十大网站建设品牌网站建设杭州
  • 网站流量怎么赚钱百度推广营销怎么做
  • 辛集外贸网站建设鹤壁seo推广
  • 宁波批发网站制作域名检测查询
  • 河北廊坊seo网站建设网站优化一个域名大概能卖多少钱
  • 圆通速递我做网站深圳网络推广代理
  • 大连网站制作.net小网站
  • oracle数据库做的网站抖音seo软件
  • 做网站专家成功营销案例分享
  • 虚拟主机搭建seo入门版
  • 北京搬家公司哪家最靠谱搜索引擎优化要考虑哪些方面?
  • 网站建设推广专家品牌定位
  • 博客和微博的区别seo精灵
  • 常见的网站结构类型营销策略有哪些理论