|
|
@ -225,9 +225,9 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
|
|
### 悬垂引用(Dangling References)
|
|
|
|
### 悬垂引用(Dangling References)
|
|
|
|
|
|
|
|
|
|
|
|
所谓悬垂指针是其指向的内存可能已经被分配给其它持有者。相比之下,在 Rust 中编译器确保引用永远也不会变成悬垂状态:当你拥有一些数据的引用,编译器确保数据不会在其引用之前离开作用域。
|
|
|
|
悬垂引用也叫做悬垂指针,指的是指针指向某个值后,这个值被释放掉了,而指针仍然存在,其指向的内存可能已经被分配给其它持有者。在 Rust 中编译器可以确保引用永远也不会变成悬垂状态:当你拥有一些数据的引用,编译器可以确保数据不会在其引用之前被释放,要想释放数据,必须先停止其引用的使用。
|
|
|
|
|
|
|
|
|
|
|
|
让我们尝试创建一个悬垂引用,Rust会抛出一个编译时错误:
|
|
|
|
让我们尝试测试一个悬垂引用的例子,Rust会抛出一个编译时错误:
|
|
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|
fn main() {
|
|
|
|
fn main() {
|
|
|
@ -258,7 +258,7 @@ help: consider using the `'static` lifetime
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
错误信息引用了一个我们还未介绍的功能:生命周期(lifetimes)。[该章](../../advance/lifetime.md)会详细介绍生命周期。不过,如果你不理会生命周期部分,错误信息中确实包含了为什么这段代码有问题的关键信息:
|
|
|
|
错误信息引用了一个我们还未介绍的功能:生命周期(lifetimes)。[该章](../../advance/lifetime.md)会详细介绍生命周期。不过,即使你不理解生命周期,也可以通过错误信息知道这段代码错误的关键信息:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
```text
|
|
|
|
this function's return type contains a borrowed value, but there is no value for it to be borrowed from.
|
|
|
|
this function's return type contains a borrowed value, but there is no value for it to be borrowed from.
|
|
|
|