Rust:一个不再有 C/C+的,实现安全实时软件的未来( 八 )
这里使用 lambda 的方式很大程度上导致了这种危险的发生。编译器在调用时只能看到以一个函数指针,它并不能像标准函数那样检查 lambda。
结合上下文来理解这个 bug 的话,最初使用 shared_ptr 来存储数据,这一部分没有问题。然而我们却错误地将数据存储在了 unique_ptr 里,当我们试图进行更改时就会有问题,它并没有引起注意是因为编译器并没有报错。
这是 C++ 内存安全问题并没有引起重视的真实例子,作者和审核代码的人直到一次测试前都没有注意到这点。不管你有多少年的编程经验,这类 bug 根本躲不开!哪怕是编译器都不能拯救你。这时就需要更好的工具了,不仅仅是为了我们的理智着想,也是为了公众安全,这关乎职业道德。
接下来让我们看一看同样问题在 Rust 中的体现。
在 Rust 中,这种糟糕的 move() 是不会被允许的。
这是我们第一次看到 Rust 的代码。需要注意的是,默认情况下变量都是不可变的,但可以在变量前加 mut 关键词使其可变,mut 类似于 C/C++ 中的 const 的反义词。
推荐阅读
- 雷神|原神:曾经有一个强力五星角色,却因各种“流言蜚语”,擦肩而过
- 次世代|韩国战队全军覆没,斗鱼选手实力强大,一人击溃一个队
- 手机游戏|LOL手游第一个世界赛,破晓杯火热开战,DKG能紧随EDG夺冠吗?
- xyg|月光败给XYG不敢去采访,怕主持人问他一个问题!根本没办法解释
- 卡牌|王者峡谷最难抓的五个英雄,暗信算一个,榜首玩起来非常快乐
- 传奇世界|传奇世界:盘点当年出现过哪些漏洞,有一个至今都存在?
- 扁鹊|裴擒虎虎年限定有变,嫦娥拒霜思配音引热议,扁鹊有一个好消息
- 绝地求生|不播绝地求生,跑去玩双马尾少女?PDD后又一个主播“沉迷”幻塔
- 光·遇|光遇:追光季复刻盘点,下一个返场先祖,可能是笛子或者灯泡斗篷
- 地下城与勇士|DNF:“全民云上”时代到来,一个过气小副本,究竟有何魅力?