日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩高清三区 | 日韩欧美aaa | 自拍偷拍导航 | 男女免费毛片 | 欧美激情另类 | 亚洲乱淫 | 91av视频免费观看 | 玩偶游戏在线观看免费 | 在线看黄免费 | 亚洲国产私拍精品国模在线观看 | 黄色大片网| 黄色片子免费 | 欧美v亚洲 | 免费a视频在线观看 | 天堂婷婷 | 干干干日日日 | 人人爽在线 | 欧美成人免费观看 | 亚洲国产黄 | 日本四虎影院 | 久久综合综合 | 亚洲精品美女在线观看 | 久久婷婷激情 | 国产激情对白 | 久草在在线 | 五月天伊人网 | 香蕉视频免费在线 | xxxx黄色 | 日本少妇毛茸茸 | 欧美一级在线看 | 丰满人妻一区二区 | 国产福利网 | 美女av网址 | 国产原创在线视频 | 欧美草逼视频 | 国内精品视频一区 | 美女无遮挡免费网站 | 国产一级一级国产 | 国产精品久久久久无码av | h小视频在线观看 | 视频在线播 | www麻豆| 麻豆区1免费| 我和岳m愉情xxxⅹ视频 | 国产小视频一区 | 免费在线观看亚洲 | 日韩免费高清视频 | 中文字幕一区二区三区四区免费看 | 91香蕉视频黄 | av色区 | 一区二区三区四区视频在线观看 | 欧美激情在线播放 | 一级女人毛片 | 97伊人 | 午夜高潮视频 | 午夜精品福利在线观看 | 亚洲av中文无码乱人伦在线视色 | 日韩少妇内射免费播放 | 亚洲小说专区 | 久久极品| 中文字幕免费观看视频 | 综合av第一页 | 国产高清不卡一区 | 猛男被粗大男男1069 | 青青青青在线 | 噼里啪啦国语版在线观看 | 4438成人网| 女人裸体免费网站 | 欧美日韩色视频 | 韩国av电影在线观看 | 超碰在线97观看 | 麻豆精品国产传媒mv男同 | 夜色视频网站 | 天天做天天爱 | 手机看片一区 | 影音先锋在线中文字幕 | 日韩午夜影院 | 亚洲一区二区三区四区五区xx | 极品美妇后花庭翘臀娇吟小说 | 强行挺进白丝老师翘臀网站 | 亚洲成人av综合 | 一区自拍| 精品动漫一区二区三区在线观看 | 国产成人在线网站 | 国产女女做受ⅹxx高潮 | av无线看 | 老湿机69福利区午夜x片 | 日本不卡在线视频 | 日本男女啪啪 | 成年人视频网 | 亚洲欧美日韩高清 | 久久这里只有精品久久 | 中文字幕岛国 | 大陆女明星乱淫合集 | 激情欧美网站 | 日韩一级不卡 | 人人做人人爽 | 国产一区二区久久精品 | 国产成人在线视频 |