mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-01-13 13:50:37 +08:00
Update Ch15
This commit is contained in:
parent
20df37f349
commit
5049bb08c0
@ -478,13 +478,13 @@ fn main() {
|
||||
|
||||
**Running Code on Cleanup with `Drop` Trait**
|
||||
|
||||
对于灵巧指针模式来讲,重要的第二个特质便是 `Drop` 了,他允许咱们在某个值即将超出作用域时,对要发生什么加以定制。在任何类型上,咱们都可以提供 `Drop` 特质的一个实现,而那些代码就可被用于释放诸如文件或网络连接等资源。
|
||||
对于灵巧指针模式来讲,第二个重要的特质是 `Drop`,他允许咱们定制某个值即将超出作用域时发生的事情。咱们可以在任何类型上,为 `Drop` 特质提供一个实现,实现代码可用于释放文件或网络连接等资源。
|
||||
|
||||
这里之所以在灵巧指针上下文中引入 `Drop` 特质,是由于 `Drop` 特质的功能,几乎总是用在实现某个灵巧指针的时候。比如,在某个 `Box<T>` 被弃用时,`Drop` 特质就会解除该匣子所指向的堆上的内存空间分配。
|
||||
咱们之所以在灵巧指针上下文中引入 `Drop` 特质,是由于 `Drop` 特质的功能在实现某个灵巧指针时几乎都会用到。比如,当 `Box<T>` 被弃用时,他将释放该匣子指向的堆上的内存空间。
|
||||
|
||||
在一些语言中,对于某些类型,编程者就必须在他们每次结束使用这些类型的某个实例时,调用代码来释放内存或其他资源。这类示例包括了文件把手、套接字或一些锁等等(file handles, sockets, or locks)。若他们忘记了这点,那么系统就会变得过载并崩溃。而在 Rust 中,咱们就可以指定出,在每当有某个值超出作用域时,所运行的一些特定代码,而编译器就会自动插入这些代码。结果就是,咱们就不需要小心翼翼地,在程序里某种特定类型的某个示例结束使用的各处,放置那些清理代码了 -- 咱们仍不会泄露各种资源!
|
||||
在某些语言中,对于某些类型,程序员必须在每次使用完这些类型的实例后,调用代码来释放内存或资源。这方面的例子包括文件句柄、套接字或锁,file handles, sockets, or locks。如果他们忘记了,系统可能会变得过载并崩溃。在 Rust 中,咱们可以指定在值超出范围时运行一段特定的代码,编译器将自动插入这段代码。因此,咱们无需小心地将清理代码,放在程序中某个特定类型的实例完成后的任何地方 -- 咱们仍然不会泄露资源!
|
||||
|
||||
咱们是通过实现 `Drop` 特质,指定出在某个值超出作用域时所运行的那些代码的。`Drop` 特质要求咱们,要实现一个取到 `self` 的可变引用、名为 `drop` 的方法。现在就来实现一个有着数条 `println!` 语句的 `drop` 方法,以发现 Rust 于何时调用这个 `drop` 方法。
|
||||
咱们通过实现 `Drop` 特质,来指定当一个值超出作用域时要运行的代码。`Drop` 特质要求咱们实现一个名为 `drop` 的方法,他需要一个对 `self` 的可变引用。为了了解Rust 何时调用 `drop`,现在咱们就来用 `println!` 语句实现 `drop`。
|
||||
|
||||
下面清单 15-14 给出了仅有着一项定制功能,即在其实例超出作用域时打印出 `正在弃用 CustomSmartPointer!` 的一个 `CumstomSmartPointer` 结构体,以展示出 Rust 在何时运行这个 `drop` 函数。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user