我想重新发明轮子(引用计数智能指针),但我不确定如何正确释放与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()
是不是也会一样好,因为它不需要做一个盒子就能把它扔了