我一直在读 Rust 书,在第 15.3 章中他们介绍了 Drop 特征。它说该特征对于实现智能指针很重要(“对智能指针模式重要的第二个特征是 Drop”),但从提供的示例中我看不出原因:
\nstruct CustomSmartPointer {\n data: String,\n}\n\nimpl Drop for CustomSmartPointer {\n fn drop(&mut self) {\n println!("Dropping CustomSmartPointer with data `{}`!", self.data);\n }\n}\n\nfn main() {\n let c = CustomSmartPointer {\n data: String::from("my stuff"),\n };\n let d = CustomSmartPointer {\n data: String::from("other stuff"),\n };\n println!("CustomSmartPointers created.");\n}\nRun Code Online (Sandbox Code Playgroud)\n他们只是在容器超出范围之前打印容器拥有的值(根据我的理解,无论如何它都会被删除)。
\n关于这一点,他们说:“我们\xe2\x80\x99在这里打印一些文本,以直观地演示 Rust 何时调用 drop。”
\n是的,但是没有提供任何示例来说明该特征实际上如何有用(我猜,除了可能释放的日志资源之外)。
\n所以我的问题是:在这种情况下 Drop 实现有何重要性?忽略它是否会导致内存泄漏或其他问题?我觉得我完全没有抓住要点。有人可以提供一个用例,除了在值超出范围之前打印值之外,还可以执行其他操作吗?
\n我尝试删除 drop 实现,但这并没有改变任何内容,除了当 CustomSmartPointer 超出范围时没有打印任何内容。没有编译器错误。
\n