|
|
@ -4,7 +4,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
## 解引用裸指针
|
|
|
|
## 解引用裸指针
|
|
|
|
|
|
|
|
|
|
|
|
裸指针(raw pointer) 又称裸指针,在功能上跟引用类似,同时它也需要显式地注明可变性。但是又和引用有所不同,裸指针长这样: `*const T` 和 `*mut T`,它们分别代表了不可变和可变。
|
|
|
|
裸指针(raw pointer,又称原生指针) 在功能上跟引用类似,同时它也需要显式地注明可变性。但是又和引用有所不同,裸指针长这样: `*const T` 和 `*mut T`,它们分别代表了不可变和可变。
|
|
|
|
|
|
|
|
|
|
|
|
大家在之前学过 `*` 操作符,知道它可以用于解引用,但是在裸指针 `*const T` 中,这里的 `*` 只是类型名称的一部分,并没有解引用的含义。
|
|
|
|
大家在之前学过 `*` 操作符,知道它可以用于解引用,但是在裸指针 `*const T` 中,这里的 `*` 只是类型名称的一部分,并没有解引用的含义。
|
|
|
|
|
|
|
|
|
|
|
@ -407,7 +407,7 @@ extern "C" {
|
|
|
|
- 数据竞争
|
|
|
|
- 数据竞争
|
|
|
|
- 内存对齐问题
|
|
|
|
- 内存对齐问题
|
|
|
|
|
|
|
|
|
|
|
|
但是需要注意的是,它只能帮助识别被执行代码路径的风险,哪些未被执行到的代码是没办法被识别的。
|
|
|
|
但是需要注意的是,它只能帮助识别被执行代码路径的风险,那些未被执行到的代码是没办法被识别的。
|
|
|
|
|
|
|
|
|
|
|
|
#### Clippy
|
|
|
|
#### Clippy
|
|
|
|
|
|
|
|
|
|
|
@ -427,7 +427,7 @@ extern "C" {
|
|
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
## 总结
|
|
|
|
|
|
|
|
|
|
|
|
至此,`unsafe` 的五种兵器已介绍完毕,大家是否意犹未尽?我想说的是,就算意犹未尽,也没有其它武器了。
|
|
|
|
至此,`unsafe` 的五种兵器已介绍完毕,大家是否意犹未尽?我想说的是,就算意犹未尽,也没有其它兵器了。
|
|
|
|
|
|
|
|
|
|
|
|
就像上一章中所提到的,`unsafe` 只应该用于这五种场景,其它场景,你应该坚决的使用安全的代码,否则就会像 `actix-web` 的前作者一样,被很多人议论,甚至被喷。。。
|
|
|
|
就像上一章中所提到的,`unsafe` 只应该用于这五种场景,其它场景,你应该坚决的使用安全的代码,否则就会像 `actix-web` 的前作者一样,被很多人议论,甚至被喷。。。
|
|
|
|
|
|
|
|
|
|
|
|