diff --git a/src/chapter_3/chapter_3_16_4.md b/src/chapter_3/chapter_3_16_4.md index cdca4ee..378b89b 100644 --- a/src/chapter_3/chapter_3_16_4.md +++ b/src/chapter_3/chapter_3_16_4.md @@ -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方法产生。