The Rust Programming Language - 第15章 智能指针 - 15.1 使用Box<T>指向堆上的数据

15 智能指针

指针指向变量的内存地址,除了引用数据没有其它的功能,因此没有运行开销

智能指针是一类数据结构,虽然表现类似指针,但是拥有额外的元数据和功能。Rust的智能指针提供了包含引用之外的其他功能,但是指针这个概念并不是Rust独有的

在Rust中,普通指针只是借用数据,而智能指针还拥有它们指向的数据,比如String和Vec,它们都是智者指针,它们拥有数据并且可以被修改。它们也带有元数据(比如容量)和额外的功能和保证(String的数据总是有效的UTF-8编码)

智能指针通常使用结构体来实现,区别与常规结构体的是它们实现了deref 和 drop trait。deref trait允许智能指针结构体实例表现的像引用一样,这样可以编写既可以用于引用又可以用于智能指针的代码。Drop trait 允许我们自定义智能指针离开作用域时运行的代码

智能指针在Rust中是一个通用设计模式,很多库都有智能指针并且你也可以编写自己的智能指针,本章我们将会学习以下:

Box,用于在堆上分配值,实现了Deref trait值,允许Box被当作引用对待,当Box离开作用域时,由于Box类型Drop trait的实现,box所指向的数据也会被清除

Rc,一个引用计数类型,其数据可以有多个所有者

Ref和RefMut,通过RefCell访问(RefCell是一个在运行时而不是在编译时执行借用规则的类型)

我们还会涉及内部可变性模式,这是不可变类型暴露出改变其内部值的API,我们也会讨论引用循环会如何泄露内存,以及如何避免

15.1 使

你可能感兴趣的:(#,Rust,rust,开发语言,泛型,智能指针,存储空间)