走进 Rust:智能指针

Rust About 1,085 words

普通指针

引用以&符号为标志并借用了他们所指向的值

智能指针

智能指针通常使用结构体实现。不同于结构体的地方在于智能指针实现了traitDerefDrop

一类数据结构,他们的表现类似指针,但是也拥有额外的元数据和功能。

区别

引用:只借用数据的指针。

智能指针:拥有他们(他们指的是智能指针)指向的数据。

标准库中的智能指针

以下struct就是智能指针:

  • String:字符串
  • Vector<T>:集合
  • Box<T>:用于在堆上分配值
  • Rc<T>:一个引用计数类型,其数据可以有多个所有者
  • Ref<T>RefMut<T>:通过efCell<T>访问。(RefCell<T>是一个在运行时而不是在编译时执行借用规则的类型)

元祖结构体

与元组类似的结构体,称为元组结构体tuple structs)。

元组结构体有着结构体名称,但没有具体的字段名,只有字段的类型。

struct Color(i32, i32, i32);
struct Point(i32, i32);
struct Test(u8);

fn main() {
    let c = Color(0, 255, 100);
    let p = Point(10, 20);
    let t = Test(10);
}

Box<T>被定义为包含一个元素的元组结构体。

pub struct Box<
    T: ?Sized,
    #[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global,
>(Unique<T>, A);

自定义智能指针:获取第一个元祖的元素&self.0

struct MyBox<T>(T);

impl<T> MyBox<T> {
    fn new(x: T) -> MyBox<T> {
        MyBox(x)
    }
}

impl<T> Deref for MyBox<T> {
    type Target = T;

    fn deref(&self) -> &T {
        &self.0
    }
}

使用没有命名字段的元组结构体来创建不同的类型

Views: 918 · Posted: 2023-05-02

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh