shared_ptr通過控制塊中的引用計(jì)數(shù)實(shí)現(xiàn)共享所有權(quán),強(qiáng)引用計(jì)數(shù)為0時(shí)釋放對象,弱引用計(jì)數(shù)為0時(shí)釋放控制塊,確保線程安全與資源正確回收。
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ù)釋放的問題。
每個 shared_ptr 對象內(nèi)部不僅保存指向?qū)嶋H數(shù)據(jù)的指針,還持有一個指向“控制塊”的指針。這個控制塊中包含兩個關(guān)鍵計(jì)數(shù):
每當(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 釋放所管理的對象。
多個 shared_ptr 可以安全地共享同一個對象,這是通過共享控制塊實(shí)現(xiàn)的:
引用計(jì)數(shù)的操作(增減)是原子的,這意味著多個線程同時(shí)拷貝或銷毀 shared_ptr 不會導(dǎo)致計(jì)數(shù)錯誤。但注意:
當(dāng)強(qiáng)引用計(jì)數(shù)變?yōu)?0 時(shí),發(fā)生以下步驟:
這種設(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)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號