智能指针
智能指针(smart pointers)是一类数据结构,它们的表现类似指针,但是也拥有额外的元数据和功能。
引用计数 (reference counting)智能指针类型,其允许数据有多个所有者。引用计数智能指针记录总共有多少个所有者,并当没有任何所有者时负责清理数据。
在 Rust
中,普通引用 和 智能指针 的一个额外的区别是引用是一类只借用数据的指针;相反,在大部分情况下,智能指针 拥有 它们指向的数据。
智能指针通常使用 结构体 实现。智能指针区别于常规结构体的显著特性在于其实现了 Deref
和 Drop trait
。Deref trait
允许智能指针结构体实例表现的像引用一样,这样就可以编写既用于引用、又用于智能指针的代码。Drop trait` 允许自定义当智能指针离开作用域时运行的代码。
常用的一些智能指针:
Box<T>
,用于在堆上分配值;Rc<T>
,一个引用计数类型,其数据可以有多个所有者;Ref<T>
和RefMut<T>
,通过RefCell<T>
访问(RefCell<T>
是一个在运行时而不是在编译时执行借用规则的类型);
还会涉及 内部可变性(interior mutability)模式,这是不可变类型暴露出改变其内部值的 API。也会涉及 引用循环(reference cycles)会如何泄漏内存,以及如何避免。
1.Box
最后更新于