亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

shared_ptr引用計(jì)數(shù)怎樣工作 共享所有權(quán)機(jī)制解析

P粉602998670
發(fā)布: 2025-08-16 18:21:01
原創(chuàng)
939人瀏覽過
shared_ptr通過控制塊中的引用計(jì)數(shù)實(shí)現(xiàn)共享所有權(quán),強(qiáng)引用計(jì)數(shù)為0時(shí)釋放對象,弱引用計(jì)數(shù)為0時(shí)釋放控制塊,確保線程安全與資源正確回收。

shared_ptr引用計(jì)數(shù)怎樣工作 共享所有權(quán)機(jī)制解析

shared_ptr 的引用計(jì)數(shù)機(jī)制是 C++ 智能指針實(shí)現(xiàn)共享所有權(quán)的核心。它允許多個 shared_ptr 實(shí)例指向同一塊動態(tài)分配的內(nèi)存,只有當(dāng)最后一個 shared_ptr 被銷毀或重置時(shí),內(nèi)存才會被釋放。這種機(jī)制避免了內(nèi)存泄漏,也防止了重復(fù)釋放的問題。

引用計(jì)數(shù)的基本原理

每個 shared_ptr 對象內(nèi)部不僅保存指向?qū)嶋H數(shù)據(jù)的指針,還持有一個指向“控制塊”的指針。這個控制塊中包含兩個關(guān)鍵計(jì)數(shù):

  • 強(qiáng)引用計(jì)數(shù)(use_count):記錄當(dāng)前有多少個 shared_ptr 正在共享該對象。
  • 弱引用計(jì)數(shù)(weak_count):記錄有多少個 weak_ptr 指向該控制塊(用于避免循環(huán)引用)。

每當(dāng)一個新的 shared_ptr 通過拷貝構(gòu)造或賦值操作共享同一個對象時(shí),強(qiáng)引用計(jì)數(shù)加一。當(dāng)某個 shared_ptr 被銷毀或指向其他對象時(shí),強(qiáng)引用計(jì)數(shù)減一。當(dāng)強(qiáng)引用計(jì)數(shù)降為 0,shared_ptr 會自動調(diào)用 delete 釋放所管理的對象。

共享所有權(quán)的實(shí)現(xiàn)方式

多個 shared_ptr 可以安全地共享同一個對象,這是通過共享控制塊實(shí)現(xiàn)的:

  • 使用 make_shared 或 shared_ptr 構(gòu)造函數(shù)創(chuàng)建對象時(shí),會同時(shí)創(chuàng)建控制塊。
  • 拷貝 shared_ptr 時(shí),新實(shí)例與原實(shí)例共享同一個控制塊,僅增加強(qiáng)引用計(jì)數(shù)。
  • 即使多個 shared_ptr 來自不同作用域或線程(需同步),只要它們共享同一控制塊,引用計(jì)數(shù)就能正確維護(hù)。
注意:直接使用裸指針初始化多個 shared_ptr 會導(dǎo)致多個獨(dú)立的控制塊,從而引發(fā)重復(fù)釋放,這是危險(xiǎn)操作。

線程安全與性能考慮

引用計(jì)數(shù)的操作(增減)是原子的,這意味著多個線程同時(shí)拷貝或銷毀 shared_ptr 不會導(dǎo)致計(jì)數(shù)錯誤。但注意:

壁紙樣機(jī)神器
壁紙樣機(jī)神器

免費(fèi)壁紙樣機(jī)生成

壁紙樣機(jī)神器0
查看詳情 壁紙樣機(jī)神器
  • 多個線程讀寫同一個 shared_ptr 對象本身仍需外部同步。
  • 引用計(jì)數(shù)的原子操作有一定性能開銷,頻繁拷貝 shared_ptr 可能影響性能。
  • make_shared 比直接 new 更高效,因?yàn)樗軠p少一次內(nèi)存分配(對象與控制塊合并分配)。

資源釋放的完整流程

當(dāng)強(qiáng)引用計(jì)數(shù)變?yōu)?0 時(shí),發(fā)生以下步驟:

  1. 調(diào)用所管理對象的析構(gòu)函數(shù)。
  2. 釋放對象占用的內(nèi)存。
  3. 弱引用計(jì)數(shù)減一,如果此時(shí)弱引用計(jì)數(shù)也為 0,則釋放控制塊本身。

這種設(shè)計(jì)確保了 weak_ptr 能安全檢測對象是否已被銷毀,而不會訪問無效內(nèi)存。

基本上就這些。shared_ptr 的引用計(jì)數(shù)機(jī)制在保證安全的同時(shí),提供了簡潔的資源管理方式,是現(xiàn)代 C++ 中管理動態(tài)資源的推薦手段。

以上就是shared_ptr引用計(jì)數(shù)怎樣工作 共享所有權(quán)機(jī)制解析的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號