|
|
|
@ -4,7 +4,7 @@
|
|
|
|
|
> <br>
|
|
|
|
|
> commit 1fedfc4b96c2017f64ecfcf41a0a07e2e815f24f
|
|
|
|
|
|
|
|
|
|
**指针** (*pointer*)是一个包含内存地址的变量的通用概念。这个地址引用,或 “指向”(points at)一些其他数据。Rust 中最常见的指针是第四章介绍的 **引用**(*reference*)。引用以 `&` 符号为标志并借用了他们所指向的值。除了引用数据没有任何其他特殊功能。它们也没有任何额外开销,所以应用的最多。
|
|
|
|
|
**指针** (*pointer*)是一个包含内存地址的变量的通用概念。这个地址引用,或 “指向”(points at)一些其他数据。Rust 中最常见的指针是第四章介绍的 **引用**(*reference*)。引用以 `&` 符号为标志并借用了他们所指向的值。除了引用数据没有任何其他特殊功能。它们也没有任何额外开销,所以应用得最多。
|
|
|
|
|
|
|
|
|
|
另一方面,**智能指针**(*smart pointers*)是一类数据结构,他们的表现类似指针,但是也拥有额外的元数据和功能。智能指针的概念并不为 Rust 所独有;其起源于 C++ 并存在于其他语言中。Rust 标准库中不同的智能指针提供了多于引用的额外功能。本章将会探索的一个例子便是 **引用计数** (*reference counting*)智能指针类型,其允许数据有多个所有者。引用计数智能指针记录总共有多少个所有者,并当没有任何所有者时负责清理数据。
|
|
|
|
|
|
|
|
|
@ -18,7 +18,7 @@
|
|
|
|
|
|
|
|
|
|
* `Box<T>`,用于在堆上分配值
|
|
|
|
|
* `Rc<T>`,一个引用计数类型,其数据可以有多个所有者
|
|
|
|
|
* `Ref<T>` 和 `RefMut<T>`,通过 `RefCell<T>` 访问,一个在运行时而不是在编译时执行借用规则的类型。
|
|
|
|
|
* `Ref<T>` 和 `RefMut<T>`,通过 `RefCell<T>` 访问。( `RefCell<T>` 是一个在运行时而不是在编译时执行借用规则的类型)。
|
|
|
|
|
|
|
|
|
|
另外我们会涉及 **内部可变性**(*interior mutability*)模式,这是不可变类型暴露出改变其内部值的 API。我们也会讨论 **引用循环**(*reference cycles*)会如何泄漏内存,以及如何避免。
|
|
|
|
|
|
|
|
|
|