小编New*_*ewb的帖子

为什么在 `Cell<T>` 上定义的 `set` 方法显式删除旧值?(锈)

感兴趣为什么在最后一行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做了一些我不明白的事情。

memory cell ownership rust borrow-checker

14
推荐指数
1
解决办法
310
查看次数

标签 统计

borrow-checker ×1

cell ×1

memory ×1

ownership ×1

rust ×1