我想重新发明轮子(引用计数智能指针),我不知道如何正确地释放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()
是否会工作相同,如果不是更好,因为它将不必使一个盒子只是为了下降
1条答案
按热度按时间6rqinv9w1#
正如您在
into_raw
上的文档中所看到的,仅drop_in_place
是不够的,要释放内存,还必须调用dealloc
:出于性能考虑,这两种方法都是compile to the exact same instructions,所以我只使用
drop(Box::from_raw(ptr))
来保存记住dealloc
的麻烦。