【Rust自學】15.0. 智能指針(序):什么是智能指針及Rust智能指針的特性

喜歡的話別忘了點贊、收藏加關注哦,對接下來的教程有興趣的可以關注專欄。謝謝喵!(=・ω・=)
請添加圖片描述

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 中的使用和設計模式有更深入的了解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67519.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構:線性表查找的三種方式

只要是靜態查找表即可 #define ElemType int typedef struct { ElemType *d; int length; }SSTable; 順序查找 S(n)O(1) 哨兵空間 int Search_Seq(SSTable t,ElemType key) {t.d[0]key;for (int i t.length; i >0 ; i--) {if(t.d[i]t.d[0]){return i;}}return 0; } 折半查找…

記錄一次,PyQT的報錯,多線程Udp失效,使用工具如netstat來檢查端口使用情況。

1.問題 報錯Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 932, in _bootstrap_inner File "threading.py", line 870, in run File "main.py", line 456, in udp_recv IndexError: list…

電路研究9.2.5——合宙Air780EP中GPS 相關命令使用方法研究

注&#xff1a;本命令僅適用于合宙 4G CAT1 模塊&#xff08;Air780EG 系列&#xff09;。 正好&#xff0c;我們使用的Air780EP好像也有4G CAT1模塊&#xff0c;好像也屬于Air780EG系列吧。 這個例子好像比較少就個。 18.9 使用方法舉例 18.1GPS 開關&#xff1a;ATCGNSPWR 這…

【C語言】在Windows上為可執行文件.exe添加自定義圖標

本文詳細介紹了在 Windows 環境下,如何為使用 GCC 編譯器編譯的 C程序 添加自定義圖標,從而生成帶有圖標的 .exe 可執行文件。通過本文的指導,讀者可以了解到所需的條件以及具體的操作步驟,使生成的程序更具專業性和個性化。 目錄 1. 準備條件2. 具體步驟步驟 1: 準備資源文…

python編程環境安裝保姆級教程--python-3.7.2pycharm2021.2.3社區版

第1步安裝解釋器python-3.7.2&#xff0c;第2步安裝pycharm編程軟件 1、安裝解釋器 1.1 什么是解釋器 就是將Python高級程序語言翻譯成為計算機可以識別的0、1代碼 1.2 安裝解釋器python-3.7.2&#xff08;根據自己的操作系統安裝適配的解釋器&#xff0c;以Windows為例&…

STM32 TIM輸入捕獲 測量頻率

輸入捕獲簡介&#xff1a; IC&#xff08;Input Capture&#xff09;輸入捕獲 輸入捕獲模式下&#xff0c;當通道輸入引腳出現指定電平跳變時&#xff0c;當前CNT的值將被鎖存到CCR中&#xff0c;可用于測量PWM波形的頻率、占空比、脈沖間隔、電平持續時間等參數 每個高級定時器…

21.3-啟動流程、編碼風格(了解) 第21章-FreeRTOS項目實戰--基礎知識之新建任務、啟動流程、編碼風格、系統配置 文件組成和編碼風格(了解)

21.3-啟動流程、編碼風格(了解) 啟動流程 第一種啟動流程(我們就使用這個): 在main函數中將硬件初始化、RTOS系統初始化&#xff0c;同時創建所有任務&#xff0c;再啟動RTOS調度器。 第二種啟動流程&#xff1a; 在main函數中將硬件初始化、RTOS系統初始化&#xff0c;只…

【AI非常道】二零二五年一月(二),AI非常道

經常在社區看到一些非常有啟發或者有收獲的話語&#xff0c;但是&#xff0c;往往看過就成為過眼云煙&#xff0c;有時再想去找又找不到。索性&#xff0c;今年開始&#xff0c;看到好的言語&#xff0c;就記錄下來&#xff0c;一月一發布&#xff0c;亦供大家參考。 有關AI非…

Mac Electron 應用簽名(signature)和公證(notarization)

在MacOS 10.14.5之后&#xff0c;如果應用沒有在蘋果官方平臺進行公證notarization(我們可以理解為安裝包需要審核&#xff0c;來判斷是否存在病毒)&#xff0c;那么就不能被安裝。當然現在很多人的解決方案都是使用sudo spctl --master-disable&#xff0c;取消驗證模式&#…

1、開始簡單使用rag

文章目錄 前言數據存放申請api開始代碼安裝依賴從文件夾中讀取文檔文檔切塊將分割嵌入并存儲在向量庫中檢索部分代碼構造用戶接口演示提示 整體代碼 前言 本章只是簡單使用rag的一個示例&#xff0c;為了引出以后的學習&#xff0c;將整個rag的流程串起來 數據存放 一個示例…

C 標準庫 - `<errno.h>`

C 標準庫 - <errno.h> 引言 在C語言編程中,正確處理錯誤是保證程序穩定性和可靠性的關鍵。C標準庫中的<errno.h>頭文件提供了錯誤碼定義和宏,使得開發者能夠更好地管理和處理程序運行過程中可能出現的錯誤。本文將詳細介紹<errno.h>頭文件的作用、常用錯…

愛書愛考平臺說明

最近我開發了一個綜合性的考試平臺&#xff0c;內容包括但不限于職業資格證考試、成人教育、國家公務員考試等內容。目前1.0版本已經開發完成&#xff0c;其他的功能陸續完善中。 微信小程序搜索"愛書愛考" 微信小程序圖標如下圖: 目前維護了java相關的面試題的考題…

ZZNUOJ(C/C++)基礎練習1011——1020(詳解版)

目錄 1011 : 圓柱體表面積 C語言版 C版 1012 : 求絕對值 C語言版 C版 1013 : 求兩點間距離 C語言版 C版 1014 : 求三角形的面積 C語言版 C版 1015 : 二次方程的實根 C語言版 C版 1016 : 銀行利率 C語言版 C版 1017 : 表面積和體積 C語言版 C版 代碼邏輯…

Java面試題2025-設計模式

1.說一下開發中需要遵守的設計原則&#xff1f; 設計模式中主要有六大設計原則&#xff0c;簡稱為SOLID &#xff0c;是由于各個原則的首字母簡稱合并的來(兩個L算一個,solid 穩定的)&#xff0c;六大設計原則分別如下&#xff1a; 1、單一職責原則 單一職責原則的定義描述非…

認識小程序的基本組成結構

1.基本組成結構 2.頁面的組成部分 3.json配置文件 4.app.json文件(全局配置文件&#xff09; 5.project.config.json文件 6.sitemap.json文件 7.頁面的.json配置文件 通過window節點可以控制小程序的外觀

git中有關old mode 100644、new mode 10075的問題解決小結

在 Git 版本控制系統中&#xff0c;文件權限變更是一種常見情況。當你看到類似 old mode 100644 和 new mode 100755 的信息時&#xff0c;這通常表示文件的權限發生了變化。本文將詳細解析這種情況&#xff0c;并提供解決方法和注意事項。 問題背景 在 Git 中&#xff0c;文…

20個整流電路及仿真實驗匯總

0、 前言 以下是關于“20個整流電路及仿真實驗匯總”的前言部分: 在現代電力電子技術領域,整流電路作為將交流電(AC)轉換為直流電(DC)的關鍵電路,廣泛應用于各類電源設計、信號處理以及電力電子設備中。整流電路不僅能夠為電子設備提供穩定的直流電源,還在電力傳輸、…

截取窗口的完整矩形不包括陰影區域(含邊框和標題欄)

在Windows編程中&#xff0c;GetWindowRect 函數用于獲取窗口的矩形區域&#xff0c;包括窗口的邊框和標題欄。如果你希望獲取窗口的客戶區&#xff08;不包含窗口邊框、標題欄和陰影區域&#xff09;&#xff0c;可以使用 GetClientRect 函數。 區別 GetWindowRect&#xff1…

第30章 測試驅動開發中的設計模式解析(Python 版)

寫在前面 這本書是我們老板推薦過的&#xff0c;我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后&#xff0c;我突然思考&#xff0c;對于測試開發工程師來說&#xff0c;什么才更有價值呢&#xff1f;如何讓 AI 工具更好地輔助自己寫代碼&#xff0c;或許…

2025美賽復盤總結反思(論文手)

充實的經歷&收獲 美賽這個過程&#xff0c;確實逼著自己學了不少東西&#xff0c;excel本身&#xff0c;以及發現Ai確實能幫忙處理不少的了&#xff0c;也第一次發現原來自己熬通宵也能很精神&#xff08;當然確實是傷身體的&#xff09; 好的經驗&#xff1a; 積極搜索…