喜歡的話別忘了點贊、收藏加關注哦,對接下來的教程有興趣的可以關注專欄。謝謝喵!(=・ω・=)
15.0.1 指針的基本概念
指針是一個變量在內存中包含的是一個地址,指向另一個數據。
Rust 中最常見的指針是引用,使用&
符號來表示,它會借用它指向的值。除了引用數據之外,它們沒有任何特殊功能,也沒有額外開銷。
15.0.2 智能指針簡介
智能指針的概念并非 Rust 獨有:它起源于 C++,也存在于其他語言中。
Rust 的標準庫中定義了各種智能指針,它們提供的功能超出了普通引用的能力。
智能指針的行為與指針類似,但提供了額外的元數據和功能。
15.0.3 智能指針與引用的區別
- 引用只能借用數據,而智能指針通常擁有它指向的數據。
- 智能指針具有額外的元數據和功能,例如自動清理和其他保障。
15.0.4 智能指針的常見類型
引用計數 (Reference Counting) 類型
引用計數智能指針通過記錄所有者的數量,實現數據的多重持有。它會在沒有使用者時自動清理數據。
標準庫中的智能指針
在前文中,我們已經接觸過一些智能指針,例如:
String
:擁有一片內存區域并保障其數據是合法的 UTF-8 編碼。Vec<T>
:提供容量等元數據并允許操作動態數組。
15.0.5 智能指針的實現
智能指針通常通過 struct
實現,但與普通結構體不同的是,它們一般會實現以下兩個重要的 trait:
Deref
:允許智能指針的實例表現得像一個引用,使程序可以同時支持引用和智能指針。Drop
:允許程序員自定義智能指針實例超出作用域時運行的清理代碼。
在本章中,我們將討論這兩個 trait 并演示它們對智能指針的重要性。
15.0.6 本章內容
由于智能指針是一種常見的設計模式,本章將重點介紹標準庫中最常用的智能指針類型:
Box<T>
:用于支持多重所有權的引用計數類型。Rc<T>
,一種支持多重所有權的引用計數類型Ref<T>
和RefMut<T>
,通過RefCell<T>
訪問,這是一種在運行時而不是編譯時強制執行借用規則的類型
此外,本章還將討論以下主題:
- 內部可變性模式 (Interior Mutability Pattern):一種允許不可變類型暴露可修改內部值的 API 的設計模式。
- 引用循環 (Reference Cycles):它如何導致內存泄漏以及如何預防。
通過這些內容,您將對智能指針在 Rust 中的使用和設計模式有更深入的了解。