最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

智能指針

2023-07-04 21:50 作者:追逐彗星的尾巴  | 我要投稿

智能指針(Smart Pointers)是一種用于管理動態(tài)分配的內(nèi)存的對象。它們可以自動處理資源的釋放,從而減少內(nèi)存泄漏的風(fēng)險。最常見的智能指針類型有std::unique_ptrstd::shared_ptr

std::unique_ptr

unique_ptr是一種獨占所有權(quán)的智能指針。一個unique_ptr是唯一指向一塊內(nèi)存的所有者,當(dāng)unique_ptr超出作用域或被顯式地釋放時,內(nèi)存會被自動釋放。

Case

std::shared_ptr

shared_ptr是一種共享所有權(quán)的智能指針。多個shared_ptr可以指向同一塊內(nèi)存,并且會跟蹤有多少個指針指向該內(nèi)存(引用計數(shù))。只有當(dāng)最后一個指向該內(nèi)存的shared_ptr被銷毀時,內(nèi)存才會被釋放。

Case

如果使用new關(guān)鍵字來創(chuàng)建shared_ptr,會導(dǎo)致更大的內(nèi)存開銷。因為new關(guān)鍵字分配了兩個獨立的內(nèi)存塊,一個用于存儲對象,另一個用于存儲引用計數(shù)(即shared_ptr的數(shù)量),而且在釋放內(nèi)存的時候也要分別釋放兩塊內(nèi)存。而make_shared函數(shù)將對象和引用計數(shù)存儲在同一塊內(nèi)存中,避免了額外的內(nèi)存分配。

但是shared_ptr有一個潛在的問題——循環(huán)引用。循環(huán)引用指的是兩個或多個對象相互持有對方的shared_ptr,導(dǎo)致它們的引用計數(shù)永遠(yuǎn)不會變?yōu)榱?,從而無法釋放內(nèi)存。

Case :

當(dāng)ptrA和ptrB離開作用域時,由于循環(huán)引用導(dǎo)致對象的引用計數(shù)無法變?yōu)榱?,從而?dǎo)致內(nèi)存泄漏。沒有對象會被正確地銷毀,析構(gòu)函數(shù)也不會被調(diào)用。

std::weak_ptr

std::weak_ptr也是一種智能指針,用于解決shared_ptr可能出現(xiàn)的循環(huán)引用問題。 weak_ptr允許創(chuàng)建一個指向shared_ptr所管理對象的非擁有引用。weak_ptr是一種弱引用,它允許觀察由shared_ptr管理的對象,而不會增加引用計數(shù)。換句話說,weak_ptr不會影響對象的生命周期。

weak_ptr的創(chuàng)建只能通過shared_ptr的賦值來實現(xiàn)。可以使用weak_ptr的成員函數(shù)lock來獲得指向所管理對象的shared_ptr強引用,它返回一個有效的shared_ptr,如果對象已被銷毀,則返回空的shared_ptr

weak_ptr還提供了一個成員函數(shù)expired,用于檢查弱引用指向的對象是否已經(jīng)被銷毀。如果對象已銷毀,則返回true,否則返回false。

這樣就能正確調(diào)用A和B的析構(gòu)函數(shù)。


智能指針的評論 (共 條)

分享到微博請遵守國家法律
友谊县| 遵义市| 抚州市| 托克托县| 罗甸县| 景谷| 六枝特区| 祥云县| 贵阳市| 阜新市| 铁岭县| 衡阳市| 南漳县| 西峡县| 泸定县| 舒城县| 大足县| 海淀区| 三河市| 定西市| 深州市| 南木林县| 周至县| 临邑县| 柳林县| 湘潭市| 深圳市| 上林县| 隆安县| 寿阳县| 万州区| 电白县| 深泽县| 彰化县| 汉寿县| 扎鲁特旗| 和政县| 巴里| 宁夏| 遵义县| 德江县|