想一想一些我们已经见过的智能指针,例如 Vec<T>
和 String
。
Vec<T>
是一个智能指针,它只拥有一些字节的内存区域。 Rust 编译器不知道这些字节中存在着什么。 智能指针解释从它管理的内存区域获取数据意味着什么,跟踪这些字节中的数据结构开始和结束的位置,最后将指针解引用到数据结构中, 成为一个漂亮干净的可以阅读的接口供我们使用(例如my_vec[3]
)。
类似地,String
跟踪字节的内存区域,并以编程方式将写入其中的内容限制为始终有效的 utf-8
,并帮助将该内存区域解引用为类型 &str
。
这两种数据结构都使用不安全的解引用指针来完成它们的工作。
内存细节: