热门

最新

红包

立Flag

投票

同城

我的

发布
weixin_52593983
非凸科技
4 年前
trueweixin_52593983

Rust Cell 与RefCell,有啥区别?
1.相同点:绕开所有权的限制,实现内部可变性

rust 的所有权规则:(1)只能由一个可变引用;(2)允许存在多个不可变引用

Cell主要是一些setter和getter的方法,比如set,get,replace,take, 但是呢,get的方法需要变量实现Copy trait,比如String类型没有实现Copy trait, 那么Cell::new(String::from("Hello")).get()会报错,提示说没有实现Copy trait。

而replace,set,take则适用于String这种没有实现Copy trait的类型。一般来说,Cell内部实现会发生内存的分配,性能较之RefCell有点大。

RefCell提供了borrow_mut和borrow,调用这两个方法时,rust的运行时会检查所有权,比如borrow_mut调用时,类型已经存在了可变引用了,则会直接发生线程panic,因此提供了返回错误的版本:try_borrow_mut和try_borrow。

2.不同点:
(1)Cell 是操作T(values), RefCell操作&T(references)
(2)Cell 在编译器检查,运行时不会panic;RefCell在运行时检查,使用不当会发生panic

非凸科技是Rust量化先行者,追求高效和极致。如果热衷Rust,喜欢量化,欢迎加入非凸!

CSDN App 扫码分享
分享
评论
点赞
打赏
  • 复制链接
  • 举报
下一条:
c++ rpc:https://www.bianchengquan.com/article/606453.html
立即登录