c++系列之智能指針的使用

在這里插入圖片描述

💗 💗 博客:小怡同學
💗 💗 個人簡介:編程小萌新
💗 💗 如果博客對大家有用的話,請點贊關注再收藏 🌞

智能指針的使用及原理

AII(Resource Acquisition Is Initialization)是一種利用對象生命周期來控制程序資源(如內
存、文件句柄、網絡連接、互斥量等等)的簡單技術。
在對象構造時獲取資源,接著控制對資源的訪問使之在對象的生命周期內始終保持有效,最后在對象析構的時候釋放資源。

std::auto_ptr

c++98版本的庫中就提供了auto_ptr的智能指針。下面演示的auto_ptr的使用及問題。
auto_ptr的實現原理:管理權轉移的思想,下面簡化模擬實現了一份bit::auto_ptr、

template<class T>class auto_ptr{public:auto_ptr(T* ptr):_ptr(ptr){}auto_ptr(const auto_ptr<T>& ap){_ptr = ap._ptr;ap._ptr = nullptr;}auto_ptr<T>& operator=(const auto_ptr<T>& ap){if (&ap == this)return *this;_ptr = ap._ptr;ap._ptr = nullptr;}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}~auto_ptr(){delete _ptr;}private:T* _ptr;};

std::unique_ptr

unique_ptr的實現原理:簡單粗暴的防拷貝,下面簡化模擬實現了一份UniquePtr來

template<class T>class unique_ptr{public:unique_ptr(T* ptr):_ptr(ptr){}unique_ptr(const unique_ptr<T>& ap) = delete;//防止拷貝unique_ptr<T>& operator=(const  unique_ptr<T>& ap) = delete;T& operator*(){return *_ptr;}T* operator->(){return _ptr;}~unique_ptr(){delete _ptr;}private:T* _ptr;};

std::shared_ptr

c++11中開始提供更靠譜的并且支持拷貝的shared_ptr

template<class T>class shared_ptr{public://這個函數是模擬仿函數傳進來的場景主要作用顯示釋放內存,其他成員函數調用不了D類型所以在成員變量中加入包裝類函數這樣類中都能使用這個函數了template<class D>shared_ptr(T* ptr, D del):_ptr(ptr), count(new int(1)), _del(del){}shared_ptr(T* ptr):_ptr(ptr), count(new int(1)){}shared_ptr(const shared_ptr<T>& sp){_ptr = sp._ptr;count = sp.count;++(*count);}shared_ptr<T>& operator=(const  shared_ptr<T>& sp){if (this == &sp)return this;_ptr = sp._ptr;count = sp.count;++(*count++);}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}~shared_ptr(){if (--(*count) == 0){_del(_ptr);delete count;}}private:T* _ptr;int* count;function<void(T*)> _del = [](T* ptr) {delete ptr; };};
}

shared_ptr會出現循環引用的現象他的解決方案:在引用計數的場景下,節點中的_prev和_next改成weak_ptr就可以了

	template<class T>class weak_ptr{weak_ptr():_ptr(nullptr){}weak_ptr(const shared_ptr<T>& sp):_ptr(sp._ptr){}weak_ptr<T>& operator=(const shared_ptr<T>& sp):_ptr(sp._ptr){return* this;}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}private:T* _ptr;};

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

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

相關文章

知識蒸餾(Knowledge Distillation, KD)

知識蒸餾&#xff08;Knowledge Distillation, KD&#xff09;是一種模型壓縮與知識遷移技術&#xff0c;通過讓小型學生模型&#xff08;Student&#xff09;模仿大型教師模型&#xff08;Teacher&#xff09;的行為&#xff08;如輸出概率分布或中間特征表示&#xff09;&…

chatGPT 會擴大失業潮嗎?

擊上方關注 “終端研發部” 設為“星標”&#xff0c;和你一起掌握更多數據庫知識 對于部分人而言&#xff0c;失業是必然趨勢。 這不&#xff0c;身后的一測試大哥&#xff0c;自從公司解散之后&#xff0c;已經在家待業半年了。。。 自打OpenAI推出了chatGPT3.0之后&#xff…

FPGA基礎 -- Verilog行為級建模之時序控制

Verilog 行為級建模&#xff08;Behavioral Modeling&#xff09;中“時序控制”機制的系統化由淺入深培訓內容&#xff0c;適用于初學者到進階 FPGA 設計工程師的學習路徑。 &#x1f3af; 一、行為級建模的定位 行為級建模&#xff08;Behavioral Modeling&#xff09;是 Ve…

設計模式精講 Day 7:橋接模式(Bridge Pattern)

【設計模式精講 Day 7】橋接模式&#xff08;Bridge Pattern&#xff09; 文章簡述 在軟件系統中&#xff0c;類的繼承關系往往會導致類爆炸&#xff0c;尤其是在需要組合多種功能或行為時。橋接模式&#xff08;Bridge Pattern&#xff09;通過將抽象部分與其實現部分分離&am…

Apipost 簽約銳捷網絡:AI賦能,共推 ICT 領域 API 生態智能化升級

日前&#xff0c;北京北極狐信息科技有限公司&#xff08;簡稱 “北極狐科技”&#xff09;與銳捷網絡股份有限公司&#xff08;簡稱 “銳捷網絡”&#xff09;正式簽署合作協議&#xff0c;雙方將聚焦 ICT 基礎設施及解決方案領域&#xff0c;圍繞 API 全鏈路管理與智能化研發…

RK3568筆記八十三:RTMP推流H264和PCM

若該文為原創文章,轉載請注明原文出處。 前面有通過勇哥,實現了RTMP推流,但一直想加上音頻,所以經過測試,寫了一個demo, ffmpeg是使用ubuntu下安裝測試的。 安裝參考:Ubuntu20.4下x264、x265、fdk-aac和FFmpeg4.3源碼編譯安裝_ubuntu安裝libx264-CSDN博客 記錄:實現從…

產業園智慧化升級中 DDC 樓宇自控系統的集成應用優勢:多業態協同與能源可視化管控?

摘要? 在產業園智慧化升級浪潮中&#xff0c;直接數字控制&#xff08;DDC&#xff09;系統憑借強大的集成能力&#xff0c;成為實現多業態協同與能源可視化管控的核心技術。本文深入剖析 DDC 系統在整合園區多元業態、優化能源管理方面的獨特優勢&#xff0c;通過系統集成打…

Vue 3瀑布流組件實現詳解 - 圖片展示方案

引言&#xff1a;瀑布流布局的魅力與應用場景 在當今富媒體內容主導的網絡環境中&#xff0c;瀑布流布局已成為展示圖片商品等內容的流行方式。它通過動態布局算法在有限空間內最大化內容展示&#xff0c;提供視覺連續性和流暢瀏覽體驗。本文將深入探討如何使用Vue 3實現一個功…

如何確保郵件內容符合反垃圾郵件規范?

一、遵守相關法規 美國《CAN-SPAM法案》規定&#xff0c;郵件頭信息必須真實準確&#xff0c;要標明廣告性質、提供有效地址&#xff0c;并在 10 個工作日內響應退訂請求。 歐盟《通用數據保護條例》&#xff08;GDPR&#xff09;強調獲得用戶明確同意&#xff0c;數據使用要…

MQ解決高并發下訂單問題,實現流量削峰

文章目錄 示例&#xff1a;電商秒殺系統中的流量削峰1. 依賴引入&#xff08;Maven&#xff09;2. 消息隊列配置&#xff08;RabbitMQ&#xff09;3. 生產者&#xff1a;訂單服務&#xff08;接收高并發請求&#xff09;4. 消費者&#xff1a;庫存服務&#xff08;按系統容量處…

【二進制安全作業】250616課上作業2 - 棧溢出漏洞利用

文章目錄 前言一、使用環境二、程序源碼1. C語言源碼2. 編譯方式 三、源碼分析四、反匯編分析1. 檢查文件安全性2. 查找目標函數3. 計算偏移量4. 繞過 strlen5. 繞過 if 五、編寫EXP結語 前言 直接進入正題 一、使用環境 處理器架構&#xff1a;x86_64 操作系統&#xff1a;U…

Python類型處理與推導式

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀和評論&#x1f604;。 目錄 1 引言2 類型處理3 高效操作AI開發常見數據結構3…

數據庫char字段做trim之后查詢很慢的解決方式

select * from TABLE0 where trim(column1):param 當表數據量大時&#xff0c;即使給column1字段加上索引&#xff0c;這條查詢語句也會很慢。 因為使用trim函數后&#xff0c;column1的索引會失效&#xff0c;有兩種處理方法&#xff1a; 1.給表加上trim(column1)函數索引 …

Kafka核心架構解析:從CAP理論到消息可靠性的設計哲學

摘要 本文從分布式系統CAP理論和消息可靠性兩個視角深入解析Kafka的架構設計&#xff0c;通過概念關系圖和組件交互圖揭示其核心設計思想&#xff0c;并詳細拆解各組件功能與協作機制。文章包含完整的交互流程分析和配置參數說明&#xff0c;是理解Kafka設計精髓的實用指南。 一…

LeetCode 275.H指數 II

題目&#xff1a; 給你一個整數數組 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇論文被引用的次數&#xff0c;citations 已經按照 非降序排列 。計算并返回該研究者的 h 指數。 h 指數的定義&#xff1a;h 代表“高引用次數”&#xff08;high citations&…

OV汽車攝像頭cmos sensor 相關情況介紹

OV汽車攝像頭cmos sensor 相關情況介紹 文章目錄 OV汽車攝像頭cmos sensor 相關情況介紹**1. 汽車攝像頭三大場景應用****2. 車載CMOS SENSOR的核心技術****3. 兩大車規認證:實現真正的車規可靠性****4. 最新產品**2022年,汽車智能化加碼提速,被譽為“智能駕駛之眼”的車載攝…

Pinia在多步驟表單中的實踐應用

引言 Pinia是Vue 3推薦的狀態管理庫&#xff0c;相比Vuex提供了更簡潔的API、更好的TypeScript支持和更靈活的組合式風格。本文基于實際項目代碼&#xff0c;詳細介紹Pinia在多步驟表單場景中的應用方法。 1. Pinia Store的創建與設計 1.1 基礎Store結構 在src/store/modul…

目標檢測之YOLOV11的環境搭建

1 創建虛擬環境 conda create -n yolov11 python3.9 conda activate yolov112 安裝ultralytics 默認是有cuda的情況下 # Install all packages together using conda conda install pytorch torchvision conda 還不能直接安裝ultralytics&#xff0c;需要通過pip進行安裝 …

Android 構建配置中的變量(通常在設備制造商或定制 ROM 的 AndroidProducts.mk 或產品配置文件中定義)

以下是 Android 構建系統中常見的用于產品配置、資源復制和構建規則的變量 1. PRODUCT_COPY_FILES 作用&#xff1a;指定需要從源碼樹復制到鏡像的文件。示例&#xff1a;PRODUCT_COPY_FILES \device/manufacturer/device_name/file.conf:$(TARGET_COPY_OUT_VENDOR)/etc/file…

火山引擎項亮:機器學習與智能推薦平臺多云部署解決方案正式發布

資料來源&#xff1a;火山引擎-開發者社區 2022年7月20日&#xff0c;火山引擎2022 Force原動力大會在北京諾金酒店成功舉辦。在上午的議程中&#xff0c;《推薦系統實踐》一書的作者、同時也是火山引擎機器學習系統負責人——項亮&#xff0c;展開了題目為《開放AI基建&#x…