视窗
loading...
您现在的位置:首页 > IT认证 > 软件水平 >

软考程序员辅导:C++内存泄漏的解决办法


发现大家对写库很热衷。不过,写一个库,用C++最麻烦的事情,就是你new完了要记着delete。不过,这么傻瓜化的操作,有没有办法让电脑自动完成呢?当然是可以的。思路有以下三点:

  1、Parent对象。

  每一个对象,都要有唯一的parent,当parent析构时,要带动他所有的children析构。

  好处:

  实现简单,且具有逻辑性。

  比如:一个窗口,他的按键,就应该是这个窗口的children,当窗口析构的时候,按键也必须析构。

  坏处:

  不可以有复制构造函数……

  这个也很好理解。A-->B-->C中,a是b的parent,b是c的parent,如果允许复制,B复制了个D,那C就有两个parent,究竟怎么析构呢?

  开源库的实现:

  Qt实现了这种方式的内存管理,尤其是对GUI框架,十分适用。

  2、引用计数的SharedPtr

  指针,进行复制操作的时候,引用计数+1,析构的时候引用计数-1,当引用计数为0的时候,释放空间。

  好处:

  实现简单

  坏处:

  具有循环引用的情况。要引入WeakPtr

  开源库的实现:

  Qt同时实现了这种技术,Boost也有相关实现。

  我因为最近想自己实现一套Signalandslot库,也实现了SharedPtr,开源。

  地址:/raylib/raylib/blobs/master/SmartPtr.hpp

  评述:

  这是C++中最通用的实现手段,如果你要做一套类库,尝试使用SharedPtr,会让事情变得更加简单。

  3、重载new,实现GC

  直接重载C++操作符,实现垃圾回收。初始化一个内存池,当内存池满的时候,进行垃圾回收操作。

  好处:

  一劳永逸

  坏处:

  实现困难。

  占用内存大。

  对已有的环境,不一定会有很好的支持。

  开源库的实现:

  python和java都有垃圾回收的实现,可以进行参考。

  评述:

  内存池也许不一定要做垃圾回收,如果是静态的内存池,可以加速内存分配的过程。

閵嗘劕鍘ょ拹锝咃紣閺勫骸鎷伴悧鍫熸綀鐠囧瓨妲戦妴锟�
閺堫剛鐝柈銊ュ瀻娣団剝浼呴弶銉︾爱娴滃簼绨伴懕鏃傜秹閿涳拷鐎电娴嗘潪鐣屾畱娣団剝浼呴幋鎴滄粦閸旀稒鐪伴弽鍥ㄦ娣団剝浼呴惃鍕毉婢跺嫸绱�閹存垳婊戠亸濠囧櫢娴f粏鈧懐娈戦悧鍫熸綀閽佹ぞ缍旈弶鍐跨礉鐎佃鍨滄禒顒冩祮鏉炵晫娈戞穱鈩冧紖婵″倹婀佸鍌濐唴閹存牗婀佹笟鍨綀閹存牞绻氬▔鏇氫繆閹垵顕崣濠冩閼辨梻閮撮幋鎴滄粦閿涘本婀扮粩娆庣窗缁斿宓嗛崚鐘绘珟閿涳拷鐎电懓甯崚娑樺敶鐎硅鍨滄禒顒佸姽閹板繑鏁禒姗€鈧倸缍嬮惃鍕归柊顒婄礉閼辨梻閮撮弬鐟扮础閿涙岸鍋栨禒锟�:webmaster@jscj.com閵嗏偓閻絻鐦介敍锟�4008816886

相关文章

无相关信息
更新时间2022-09-16 10:03:35【至顶部↑】
联系我们 | 邮件: webmaster@jscj.com | 客服热线电话:4008816886(QQ同号) |  濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ゆ繛纭风節瀵鎮㈢悰鈥充壕闁汇垻娅ラ悷鐗堟瘎缂傚倸鍊风拋鏌ュ磻閹炬枼鏀介柣妯哄级婢跺嫰鏌i幘鍐叉殶闁硅尙枪楗即宕煎┑鍫Ф婵犳鍠楁灙婵炲绋掗、濠囨⒒娴e憡鍟炴繛璇х畵瀹曡瀵奸弶鎴狀攨闂佽鍎兼慨銈夋偂閺囥垺鐓冮柍杞扮閺嬨倖绻涢崼鐔糕拹闁靛洤瀚粻娑㈡晲閸曨垰浠愰梻浣告惈閺堫剛绮欓幋锕€鐓濋幖娣€楅悿鈧梺鍝勬川婵參宕€n喗鈷掑ù锝呮啞閹牓鏌i鐑嗘Ш缂佽京鍋炵粭鐔煎焵椤掑嫭鍋樻い鏇楀亾鐎规洖鐖奸、妤佸緞鐎n偅鐝ㄩ梻鍌欑閹测剝绗熷Δ鍛獥婵°倕鎳忛崕濠冪節婵犲倻澧涢柍閿嬪笒闇夐柨婵嗘噺閸ゅ牏鎲搁悧鍫濅刊闁轰礁瀚伴弻娑㈠焺閸愵亖妲堢紓浣哄У閻擄繝寮诲☉銏犖ㄦい鏃傚帶椤亪姊虹粙娆惧剱閽冮亶鏌曢崶褍顏€殿喗娼欒灃闁逞屽墯缁傚秵銈i崘鈺佲偓鐢告偡濞嗗繐顏紒鈧埀顒傜磽閸屾氨孝闁挎洦浜俊瀛樻媴缁洘鐎婚梺瑙勫劤绾绢參鎮¢幋锔解拺闂傚牊鍐荤槐锟犳煕閺囩偛顣崇痪顓涘亾婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘垿濡甸崟顖氱闁告鍋熸禒鑲╃磼閻愵剙鍔ゆい顓犲厴瀵鎮㈤悡搴n槶閻熸粌绻掗弫顔尖槈閵忥紕鍘介梺瑙勫劤閻°劎绮堢€n喗鐓涢悘鐐靛亾缁€鍐偓鍨緲鐎氼噣鍩€椤掑﹦绉靛ù婊呭仦缁傛帡骞橀瑙f嫼闂佺ǹ绻愰崥瀣Φ閻斿吋鐓曢柕濞垮€曞畵鍡涙煕閳瑰灝鐏叉鐐疵叅缂備焦蓱濞呭洭姊绘笟鈧ḿ褏鎹㈤崱娑樼柧婵犲﹤鎳夐崑鎾绘濞戞氨鍔┑顔硷攻濡炶棄螞閸愩劉妲堟慨姗嗗墻閺嗩偅绻濈喊妯活潑闁稿鎳橀幃鐑藉煛閸曨剨绱撻梻鍌欒兌绾爼宕滃┑濠傜稑濠电偛鐡ㄧ划宥囧垝閹捐钃熼柨鐔哄Т绾惧吋鎱ㄥ鍡楀婵炲牆缍婂娲川婵犲啠鎷婚梺鍝ュУ閻楃姴顕f繝姘亜闁兼祴鏅涚粊锕傛⒑閸撹尙鍘涢柛鐘崇鐎靛ジ宕奸妷锔规嫼闁哄鍋炴竟鍡涘礉瀹ュ鐓欓柣鐔哄閸犳ḿ鈧鍣崑濠囩嵁濡偐纾兼俊顖滅帛椤忕喖姊绘担鑺ョ《闁革綇绠撻獮蹇涙晸閿燂拷

付款方式留言簿投诉中心网站纠错二维码手机版

客服电话:4008816886
付款方式   |   给我留言   |   我要纠错   |   联系我们