Update chapter_3_16_4.md

This commit is contained in:
令狐一冲
2023-05-18 09:53:44 +08:00
committed by GitHub
parent c7d702f638
commit d9620617e7

View File

@@ -19,4 +19,32 @@ fn main() {
```
运行该代码,会有如下结果:
![注释](../../assets/24.png)
在上面示例代码中并没有打印语句但是在drop方法中实现了打印可以看到当_a和_b离开作用域时自动调用了drop方法。
## 2. 通过std::mem::drop提早丢弃值
当要显示的清理值时不能直接调用Drop trait里面的drop方法而要使用std::mem::drop方法示例如下
```Rust
struct Dog(String);
//下面为Dog实现Drop trait
impl Drop for Dog {
fn drop(&mut self) {
println!("Dog leave");
}
}
fn main() {
let _a = Dog(String::from("wangcai"));
let _b = Dog(String::from("dahuang"));
//a.drop();//错误不能直接调用drop
drop(_a); //正确通过std::mem::drop显示清理
println!("At the end of main");
}
```
代码运行结果如下:
![注释](../../assets/25.png)
第一个“Dog leave”打印是第14行调用释放_a产生最后一个“Dog leave”打印则是_b离开作用域时调用drop方法产生。