|
|
@ -188,7 +188,7 @@ immutable
|
|
|
|
|
|
|
|
|
|
|
|
### 悬垂引用
|
|
|
|
### 悬垂引用
|
|
|
|
|
|
|
|
|
|
|
|
在存在指针的语言中,容易通过释放内存时保留指向它的指针而错误地生成一个**悬垂指针**(*dangling pointer*),所谓悬垂指针是其指向的内存可能已经被分配给其它持有者,。相比之下,在 Rust 中编译器确保引用永远也不会变成悬垂状态:当我们拥有一些数据的引用,编译器确保数据不会在其引用之前离开作用域。
|
|
|
|
在存在指针的语言中,容易通过释放内存时保留指向它的指针而错误地生成一个**悬垂指针**(*dangling pointer*),所谓悬垂指针是其指向的内存可能已经被分配给其它持有者。相比之下,在 Rust 中编译器确保引用永远也不会变成悬垂状态:当我们拥有一些数据的引用,编译器确保数据不会在其引用之前离开作用域。
|
|
|
|
|
|
|
|
|
|
|
|
让我们尝试创建一个悬垂引用:
|
|
|
|
让我们尝试创建一个悬垂引用:
|
|
|
|
|
|
|
|
|
|
|
@ -264,4 +264,4 @@ fn no_dangle() -> String {
|
|
|
|
* 任意数量的不可变引用。
|
|
|
|
* 任意数量的不可变引用。
|
|
|
|
2. 引用必须总是有效的。
|
|
|
|
2. 引用必须总是有效的。
|
|
|
|
|
|
|
|
|
|
|
|
接下来,我们来看看一种不同类型的引用:slice。
|
|
|
|
接下来,我们来看看一种不同类型的引用:slice。
|
|
|
|