感兴趣为什么在最后一行set定义的方法显式地删除值。当函数返回时,它不应该被隐式删除(释放内存)吗?Cellold
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)
}
}
Run Code Online (Sandbox Code Playgroud)
那么为什么不设置只这样做:
pub fn set(&self, val: T) {
self.replace(val);
}
Run Code Online (Sandbox Code Playgroud)
或者std::ptr::read做了一些我不明白的事情。