3.2 解引用裸指针
02-解引用裸指针 — Comprehensive Rust
2 分钟阅读
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/unsafe-rust/dereferencing.html
3.2 解引用裸指针
创建指针是安全的,但解引用它们需要 unsafe:
| |
讲师备注 良好实践(也是 Android Rust 风格指南的要求)是为每个
unsafe块写注释,说明其中的代码如何满足所做 unsafe 操作的安全要求。就指针解引用而言,这意味着指针必须是 valid(有效的),即:
- 指针必须非空。
- 指针必须可解引用(位于单个已分配对象的边界内)。
- 对象不得已被释放。
- 不得存在对同一位置的并发访问。
- 若指针由引用转换而来,底层对象必须仍存活,且不得再通过引用来访问该内存。
多数情况下,指针还必须正确对齐。
“UNSOUND” 一节给出了一类常见 UB bug 的例子:天真地对裸指针的解引用结果取引用,会绕过编译器对该引用实际指向哪个对象的认知。因此借用检查器不会“冻结”
x,我们就能在仍存在对其引用的情况下修改它。从指针创建引用需要格外小心。