mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-02-24 02:00:50 +08:00
Update Ch15
This commit is contained in:
parent
b3e6da3a24
commit
8280ec39f3
@ -575,9 +575,9 @@ error: could not compile `sp_demos` due to previous error
|
||||
|
||||
这个错误信息指出,我们不允许显式调用 `drop`。这条错误信息使用了术语 “解构函数,destructor”,这是清理实例的函数的通用编程术语。解构函数类似于 *构造函数,constructor*,后者创建一个实例。Rust 中的 `drop` 函数就是一个特殊的解构函数。
|
||||
|
||||
Rust 之所以不让咱们显式地调用 `drop`,是因为 Rust 仍将在 `main` 函数末尾,自动调用那个值上的 `drop`。由于 Rust 会两次尝试清理同一值,因此这就会导致 *双重释放,double free* 的错误。
|
||||
Rust 之所以不允许咱们显式地调用 `drop`,是因为 Rust 仍然会在 `main` 函数结尾处自动调用值上的 `drop`,这将导致 *双重释放,double free* 的错误,由于 Rust 会试图对同一个值进行两次清理。
|
||||
|
||||
咱们无法关闭这种在某个值超出作用域时的 `drop` 自动插入,同时又无法显式地调用 `drop` 方法。因此,在咱们需要强制某个值提前被清理掉时,就要使用 `std::mem::drop` 函数。
|
||||
当值超出作用域时,我们无法禁用 `drop` 的自动插入,也无法显式调用 `drop` 方法。所以,如果我们需要强制一个值提前被清理,我们就使用 `std::mem::drop` 函数。
|
||||
|
||||
这个 `std::mem::drop` 函数不同于 `Drop` 特质中的那个 `drop` 方法。咱们是通过将要强制弃用的那个值作为参数传递,而调用他的。该函数位于 Rust 序曲中(in the prelude),因此这里就可以把清单 15-15 中的 `main` 函数,修改为如下清单 15-16 中所示的调用那个 `drop` 函数:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user