< 返回博客

自己实现Drop真的能清理内存吗

snlan 发表于

struct CustomSmartPointer { data: String, }

impl Drop for CustomSmartPointer { fn drop(&mut self) { println!("Dropping CustomSmartPointer with data {}!", self.data); } }

谁便实现了Drop(只是打印), 如果是在堆上分配内存,离开作用域后真的会清理内存吗

评论区

chirsz 2019-01-09T05:06:42.363588

这和C++的析构函数差不多的,比如如果你之前用std::alloc::alloc分配了堆内存,就要在drop时手动调用std::alloc::dealloc释放内存;不过一般使用Box、Rc等智能指针自动管理内存的分配和释放。 drop还可以用在文件的自动关闭,数据库自动断开连接等地方,这种设计叫RAII,可以自行搜索学习。

Pslydhh 2019-01-09T14:19:27.225100

会.

堆内存: fn main() { let _k = Box::new(CustomSmartPointer{ data: "SSSSSS".to_string() }); // drop(_k); println!("over"); }

非堆内存: fn main() { let _k = CustomSmartPointer{ data: "SSSSSS".to_string() }; // drop(_k); println!("over"); }

可以看到离开作用域时都回收了内存同时打印了数据。

1 共 2 评论, 共 1 页