为什么在Cell
上定义的set
方法,在最后一行明确地删除了old
值?难道函数返回时不会自动释放内存吗?
use std::mem;
use std::cell::UnsafeCell;
pub struct Cell<T> {
value: UnsafeCell<T>
}
impl<T> Cell<T> {
pub fn set(&self, val: T) {
let old = self.replace(val);
drop(old); // Is this needed?
} // old would drop here anyways?
pub fn replace(&self, val: T) -> T {
mem::replace(unsafe { &mut *self.value.get() }, val)
}
}
那么为什么不让 set 只执行这个操作呢:
pub fn set(&self, val: T) {
self.replace(val);
}
或者
std::ptr::read
执行了我不理解的操作。
replace
可能会 panic。 - rodrigo