美文网首页
[Rust]指针

[Rust]指针

作者: Tsun424 | 来源:发表于2020-01-28 18:02 被阅读0次

    Box<T>

    与我们通常熟知的指针概念相同,是指向堆中数据的指针。Box<T>沿袭了Rust所有权机制:共享不可变,可变不同享,即, 同时只能存在一个可变引用或者多个不可变引用。

    Rc<T>

    Rc<T> 主要用于同一堆上所分配的数据区域需要有多个只读访问的情况,多个访问都对数据具有所有权

    • Rc包裹的T是不可变的,即不能修改T
    • Rc只能用于单线程
    • 由于要维护引用计数,存在运行时消耗

    Cell<T>

    也是指向堆中数据的指针,但与Box<T>不同,Cell<T>允许修改T,同时,Cell<T>支持多个借用修改T。

    • 有一个限制条件是T必须是实现了Copy trait的类型
    • Cell<T>只能用在单线程

    RefCell<T>

    RefCell<T>去掉了T必须实现Copy trait的限制,不会在编译器检查,但运行时依然要保证同时只能有一个可变借用,否则线程崩溃。同时可以有多个不可变借用。

    组合使用

    Rc<T>和RefCell<T>可以组合使用,场景:同时存在多个不同所有者,每个所有者又可以随时修改其内容。

    相关文章

      网友评论

          本文标题:[Rust]指针

          本文链接:https://www.haomeiwen.com/subject/pykmthtx.html