可以将所有权、借用规则与这些智能指针做一个对比
Rust 规则 | 智能指针带来的额外规则 |
---|---|
一个数据只有一个所有者 | Rc/Arc让一个数据可以拥有多个所有者 |
要么多个不可变借用,要么一个可变借用 | RefCell实现编译期可变、不可变引用共存 |
违背规则导致编译错误 | 违背规则导致运行时panic |
选择 Cell 还是 RefCell
大概总结下两者的区别:
- Cell 只适用于 Copy 类型,用于提供值,而 RefCell 用于提供引用
- Cell 不会 panic,而 RefCell 会
与 Cell 的 zero cost 不同,RefCell 其实是有一点运行期开销的,原因是它包含了一个字大小的“借用状态”指示器,该指示器在每次运行时借用时都会被修改,进而产生一点开销。
总之,当非要使用内部可变性时,首选 Cell,只有你的类型没有实现 Copy 时,才去选择 RefCell。
标签:借用,Cell,智能,规则,RefCell,Rust,指针 From: https://www.cnblogs.com/ellabrain/p/16610853.html