日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

weak_ptr打破环状引用

發(fā)布時(shí)間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 weak_ptr打破环状引用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://blog.csdn.net/malong777/article/details/48974559

weak_ptr是一種不控制對(duì)象生存周期的智能指針,它指向一個(gè)shared_ptr管理的對(duì)象...它不會(huì)改變shared_ptr的引用計(jì)數(shù)——《C++ Primer .5th》。很明顯,weak_ptr的特點(diǎn)是“弱引用”。有什么用?應(yīng)用場(chǎng)景是什么地方?

??? 考慮它的胞兄shared_ptr,每次復(fù)制之后引用計(jì)數(shù)加一,不再指向?qū)ο?#xff08;自身銷毀或指向其他對(duì)象)時(shí)時(shí)引用計(jì)數(shù)減一,減至零值調(diào)用所管理資源對(duì)象的析構(gòu)函數(shù)。考慮這樣一個(gè)情況,兩個(gè)對(duì)象各自包含指向彼此的shared_ptr成員,形成環(huán)狀引用,引用計(jì)數(shù)永遠(yuǎn)為1,不能銷毀,造成內(nèi)存泄漏。

//x86_64 win7_64 vs2013 ultimate #include <iostream> #include <string> #include <memory> using namespace std; class A; class B; class A{ public: ~A(){ cout << "destroying A\n" ; } shared_ptr<B> pb; }; class B{ public: ~B(){ cout << "destroying B\n" ; } shared_ptr<A> pa; }; void test(){ shared_ptr<A> a(new A()); shared_ptr<B> b(new B()); a->pb = b; b->pa = a; } int main(){ cout << "begin test...\n"; test(); cout << "end test\n"; } output: begin test... end test 請(qǐng)按任意鍵繼續(xù). . .

?在函數(shù)test()中便是剛才提到的情形,A、B的對(duì)象分別被彼此的shared_ptr所引用,離開test()作用域后,A、B對(duì)象再也不能被用戶訪問,因?yàn)橹悄苤羔榓、b被銷毀了,但是各自引用計(jì)數(shù)為1,兩個(gè)對(duì)象的內(nèi)存再也不會(huì)被釋放,可怕的內(nèi)存泄漏就此產(chǎn)生。

?

??? 那么weak_ptr對(duì)此又有幫助呢?考慮如果將B中的智能指針換成weak_ptr<A>,回過頭看test()里發(fā)生了什么?首先shared_ptr版本的a、b初始化,引用計(jì)數(shù)各自為1,然后將b賦值給A中的shared_ptr,B對(duì)象引用計(jì)數(shù)變?yōu)?,將a賦值給B中的weak_ptr,此操作不改變shared_ptr<A>的引用計(jì)數(shù),依舊為1。退出test作用域,a、b析構(gòu),B引用計(jì)數(shù)變?yōu)?,A的引用計(jì)數(shù)為0。A的析構(gòu)函數(shù)被調(diào)用,A中的shared_ptr<B>也被銷毀,即B的引用計(jì)數(shù)再次減1變?yōu)?,調(diào)用B的析構(gòu)函數(shù)。此時(shí),內(nèi)存已經(jīng)被全部回收。

1 class B{ 2 public: 3 ~B(){ cout << "destroying B\n" << endl; } 4 weak_ptr<A> pa; 5 }; 6 output: 7 begin test... 8 destroying A 9 10 destroying B 11 12 end test 13 請(qǐng)按任意鍵繼續(xù).

?實(shí)際用用的例子,想象在一個(gè)tree結(jié)構(gòu)中,父節(jié)點(diǎn)通過一個(gè)共享所有權(quán)的引用(chared_ptr)引用子節(jié)點(diǎn),同時(shí)子節(jié)點(diǎn)又必須持有父節(jié)點(diǎn)的引用。如果這第二個(gè)引用也共享所有權(quán),就會(huì)導(dǎo)致一個(gè)循環(huán),最終兩個(gè)節(jié)點(diǎn)內(nèi)存都無(wú)法釋放。

轉(zhuǎn)載于:https://www.cnblogs.com/13224ACMer/p/6404068.html

總結(jié)

以上是生活随笔為你收集整理的weak_ptr打破环状引用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩精品在线观看一区二区三区 | 日本中文字幕有码 | 91手机视频 | 丰满大肥婆肥奶大屁股 | 午夜激情一区 | 美国黄色网址 | 青青超碰| 小小姑娘电影大全免费播放 | 伊人久久大香线蕉成人综合网 | 亚洲一区在线免费观看 | 黄色一级片在线看 | 国产又爽又黄免费视频 | 三年电影在线观看 | 久久综合伊人77777麻豆最新章节 | 欧洲美女粗暴牲交免费观看 | 黄色片视频免费看 | 国产对白视频 | 国产熟女一区二区三区五月婷 | 五月天综合色 | 在线播放你懂的 | japanese国产打屁股网站 | 软萌小仙自慰喷白浆 | 日韩乱码人妻无码中文字幕 | 人体内射精一区二区三区 | 黄色片免费的 | 无码人妻久久一区二区三区不卡 | 超碰在线小说 | 福利小视频在线观看 | 日韩性生交大片免费看 | 欧美色图13p | 色乱码一区二区三区 | 小箩莉末发育娇小性色xxxx | 骚黄网站 | 日本美女逼 | 欧美丝袜视频 | 全国男人的天堂网 | 一区二区午夜 | 成年人在线观看视频免费 | 色网站免费在线观看 | 国产模特av私拍大尺度 | 欧美日韩久久久久久 | 啦啦啦视频在线观看 | 国产十八熟妇av成人一区 | 在线精品视频一区 | 女人被狂躁c到高潮 | 国产免费叼嘿网站免费 | 欧美中文字幕一区二区三区 | 日韩精品成人在线观看 | 亚洲天堂影院在线观看 | 肉色超薄丝袜脚交一区二区图片 | 久久国产精品无码网站 | 国产日韩欧美在线观看 | 99精品欧美 | 理论在线视频 | 国产乱子一区二区 | 久久色在线 | 国产精品一区二三区 | 美丽的姑娘在线观看免费 | 国产欧美精品久久久 | 免费啪| 啪啪免费网站 | 国产精品二区一区二区aⅴ 一卡二卡三卡在线观看 | 国产亚洲精品久久久久久无几年桃 | 国产精品人人做人人爽人人添 | 精品国产视频一区二区 | 亚洲精品福利在线 | 中文在线最新版天堂8 | 三上悠亚中文字幕在线播放 | 中文字幕人妻一区二 | 久久久久亚洲av成人网人人网站 | 成人黄色小视频 | 亚洲婷婷小说 | 欧美成人精品欧美一级私黄 | 欧美国产精品一区二区三区 | 91视频直接看 | 美女污污网站 | 波多野结衣www | 狠狠gao| 福利一区二区在线观看 | 亚洲国产精品无码专区 | 足交在线观看 | 黄色一级带 | 日韩免费一区二区 | 超碰人人干人人 | 欧美乱淫 | 久久国产精品精品国产 | 日韩一区二区三区四区 | 欧美日韩亚洲视频 | 亚洲精品91在线 | 免费不卡av| 午夜精品久久久久久久99热浪潮 | 欧美大片在线观看 | 午夜一区二区三区在线观看 | 国产九九久久 | 久草免费资源 | 亚洲欧美日韩成人 | 国产一区在线免费观看 | 骚av在线| 欧美午夜精品久久久 |