我想重新发明轮子(参考计数智能指针),但我不确定如何正确释放使用 Box::into_raw()
泄漏的内存,一旦引用计数归零,我不知道如何有效地释放被指向的内存。
最初我尝试了
impl<T> Drop for SafePtr<T>{
fn drop(&mut self) {
//println!("drop, {} refs", self.get_refs());
self.dec_refs();
let ref_count = self.get_refs();
if ref_count == 0usize{
unsafe{
let _ = Box::from_raw(self.ptr);
let _ = Box::from_raw(self.refs);
};
println!("Dropped all pointed values");
};
}
}
但我在想,如果使用ptr::drop_in_place()
是否可以达到同样的效果,甚至更好,因为它不需要创建一个Box再将其丢弃。