Cell<T>与RefCell<T>有什么关联与差别Deref trait或DerefMut trait。Sync trait。T以受控方式被“修改”,虽然其已经同时被多个【只读-引用】所指向。T)--- 【可修改】是就Cell<T>自身而言的,Cell<T>内部值变了(别管怎么变的),反正Cell<T>的值就是不一样了。感觉它偷换概念,欺负我读书少T所在内存地址上的内容而言的,内部值T的内存位置没有变,而是那个地址上的东西变了。这明显更高级Cell<T>与RefCell<T>,“修改”的含义不一样:rust类型的【继承可修改】而言。
上图的文字描述如下:
Cell<T>“包含”的是【所有权】变量本身RefCell<T>“包含”的是变量的【引用】。即便RefCell::new(...)构造函数的实参是【所有权】变量,这也不影响其内部重点使用该变量的【内存地址】。Cell<T>编译时,代码静态扫描,借入检查RefCell<T>运行时,动态跟踪,借入检查Cell<T>违背【借入规则】的代码会导致【编译失败】RefCell<T>违背【借入规则】的代码会导致【运行时-程序崩溃panic】Cell<T>编译时成本RefCell<T>运行时成本consume”掉,再将【内部值】真取出来。比如,Cell<T: Copy>::get()Cell<T: Default>::take()以类型默认值置换出来Cell<T>::replace()以指定的值置换出来Cell<T>::into_inner()Cell<T>RefCell<T>就三步:RefCell<T>::borrow()取出变量的内存地址*RefCell<T>::borrow()以【去引用-操作符】取出该地址位置上被保存的值。Cell<T>::replace()以【新】值置换出【旧】值Cell<T>::set()放入【新】值而直接丢弃【旧】值Cell<T>RefCell<T>RefCell<T>::borrow_mut()取出变量的内存地址*RefCell<T>::borrow_mut()以【去引用-操作符】修改该地址位置上被保存的值。