Update Ch15

This commit is contained in:
Unisko PENG 2023-05-09 15:03:38 +08:00
parent 20df37f349
commit 5049bb08c0

View File

@ -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` 函数。