日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 循環引用-智能指針的死穴之一

循環引用-智能指針的死穴之一

來源:程序員人生   發布時間:2015-04-20 08:09:23 閱讀次數:3275次

       智能指針的實現思路也體現了C++基于對象的原則,對象應當為自己管理的資源負責,包括資源的分配與釋放,而且最好將資源的釋放與分配弄的自動化1點,典型的實現方法就是在構造函數里分配資源,在析構函數里釋放資源,這樣當其他程序員在使用這個對象時,該對象的資源問題幾近不用額外的操心,即優雅又方便

        然后如此完善的東西,也有其不容忽視的地方,直接上代碼:

// share_ptr.cpp : 定義控制臺利用程序的入口點。 // #include "stdafx.h" #include "common_class.h" class B; class A{ private: typedef tr1::shared_ptr<B> Item_Type; public: explicit A(){}; virtual ~A(){}; public: void SetB(const Item_Type ptr_B){m_B = ptr_B;} private: Item_Type m_B; }; class B{ private: typedef tr1::shared_ptr<A> Item_Type; public: explicit B(){}; virtual ~B(){}; public: void SetA(const Item_Type ptr_A){m_A = ptr_A;} private: Item_Type m_A; }; int _tmain(int argc, _TCHAR* argv[]) { size_t count = 100000; getchar();//查看內存狀態 while(count--) { //new出來的A的援用計數此時為1 shared_ptr<A> a(new A); //new出來的A的援用計數此時為1 shared_ptr<B> b(new B); //B的援用計數增加為2 a->SetB(b); //A的援用計數增加為2 b->SetA(a); } getchar();//查看內存狀態 //b先出作用域,B的援用計數減少為1,不為0,所以堆上的B空間沒有被釋放, //且B持有的A也沒有機會被析構,A的援用計數也完全沒減少 //a后出作用域,同理A的援用計數減少為1,不為0,所以堆上A的空間也沒有被釋放 return 0; }

 

兩次查看內存資源狀態結果

圖像1

結果可知:內存增加了幾近20M,更何況我定義的兩個對象本身不怎樣占資源,如果內部保護了幾個list,結果可想而知!

A和B都相互指著對方吼,“放開我的援用!“,“你先發我的我就放你的!”,因而悲劇產生了。

所以在使用基于援用計數的智能指針時,要特別謹慎循環援用帶來的內存泄漏,循環援用不只是兩方的情況,只要援用鏈成環都會出現問題。固然循環援用本身就說明設計上可能存在1些問題,如果特殊緣由不能不使用循環援用,那可讓援用鏈上的1方持用普通指針(或弱智能指針weak_ptr)便可.

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品国产一区二区三区久久影院 | 亚洲区一| 久久91精品国产91久久跳 | www久久| 日本aⅴ免费视频一区二区三区 | 国产精品久久久久久妇女 | 欧美亚洲成人网 | 狠狠伊人| 国产精品日韩在线观看 | 看亚洲a级一级毛片 | 欧美一区二区 | 精品一区二区不卡 | 国产精品久久久久久久久免费 | 日日噜噜夜夜狠狠久久av小说 | 91亚洲成人 | 国产伦精品一区二区三区视频黑人 | 亚洲欧美日韩一区 | 成人av播放 | 免费一级毛片在线观看 | 中文字幕一区二区av | 亚洲网站在线播放 | 免费a级毛片永久免费 | 在线视频黄 | 久久精品99国产精品 | 青青草这里只有精品 | 国产精品免费一区二区 | 国产精品国产精品国产专区不蜜 | 午夜精品一区二区三区在线 | 91麻豆精品国产91久久久使用方法 | 欧美一级夜夜爽 | 99毛片| 亚洲一区中文字幕 | 亚洲第一福利视频 | 九九香蕉视频 | 久久99精品久久久 | 午夜性生活片 | 久久国产v| 久久精品国产亚洲一区二区三区 | 一区在线看| 污视频在线 | 免费视频爱爱太爽了 |