欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

malloc/free和new/delete的區(qū)別

系統(tǒng) 1912 0
malloc/free和new/delete的區(qū)別

malloc與free是C++/C語言的標準庫函數(shù),new/delete是C++的運算符。它們都可用于申請動態(tài)內(nèi)存和釋放內(nèi)存。

對于非內(nèi)部數(shù)據(jù)類型的對象而言,光用maloc/free無法滿足動態(tài)對象的要求。對象在創(chuàng)建的同時要自動執(zhí)行構(gòu)造函數(shù),對象在消亡之前要自動執(zhí)行析構(gòu)函數(shù)。由于malloc/free是庫函數(shù)而不是運算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務強加于malloc/free。

因此C++語言需要一個能完成動態(tài)內(nèi)存分配和初始化工作的運算符new,以及一個能完成清理與釋放內(nèi)存工作的運算符delete。注意new/delete不是庫函數(shù)。

我們先看一看malloc/free和new/delete如何實現(xiàn)對象的動態(tài)內(nèi)存管理,見下面示例。

?

  1. class ?Obj??
  2. {??
  3. public ?:??
  4. ????Obj( void ){?cout?<<?“Initialization”?<<?endl;?}??
  5. ????~Obj( void ){?cout?<<?“Destroy”?<<?endl;?}??
  6. ???? void ?Initialize( void ){?cout?<<?“Initialization”?<<?endl;?}??
  7. ???? void ?Destroy( void ){?cout?<<?“Destroy”?<<?endl;?}??
  8. };??
  9. void ?UseMallocFree( void )??
  10. {??
  11. ????Obj??*a?=?(obj?*)malloc( sizeof (obj));??? //?申請動態(tài)內(nèi)存 ??
  12. ????a->Initialize();???????????????????????? //?初始化 ??
  13. ???? //… ??
  14. ????a->Destroy();??? //?清除工作 ??
  15. ????free(a);???????? //?釋放內(nèi)存 ??
  16. }??
  17. void ?UseNewDelete( void )??
  18. {??
  19. ????Obj??*a?=? new ?Obj;?? //?申請動態(tài)內(nèi)存并且初始化 ??
  20. ???? //… ??
  21. ???? delete ?a;??????????? //?清除并且釋放內(nèi)存 ??
  22. }??
?

?

類Obj的函數(shù)Initialize模擬了構(gòu)造函數(shù)的功能,函數(shù)Destroy模擬了析構(gòu)函數(shù)的功能。函數(shù)UseMallocFree中,由于malloc/free不能執(zhí)行構(gòu)造函數(shù)與析構(gòu)函數(shù),必須調(diào)用成員函數(shù)Initialize和Destroy來完成初始化與清除工作。函數(shù)UseNewDelete則簡單得多。

所以我們不要企圖用malloc/free來完成動態(tài)對象的內(nèi)存管理,應該用new/delete。由于內(nèi)部數(shù)據(jù)類型的“對象”沒有構(gòu)造與析構(gòu)的過程,對它們而言malloc/free和new/delete是等價的。

既然new/delete的功能完全覆蓋了malloc/free,為什么C++不把malloc/free淘汰出局呢?這是因為C++程序經(jīng)常要調(diào)用C函數(shù),而C程序只能用malloc/free管理動態(tài)內(nèi)存。
如果用free釋放“new創(chuàng)建的動態(tài)對象”,那么該對象因無法執(zhí)行析構(gòu)函數(shù)而可能導致程序出錯。如果用delete釋放“malloc申請的動態(tài)內(nèi)存”,理論上講程序不會出錯,但是該程序的可讀性很差。所以new/delete必須配對使用,malloc/free也一樣。





malloc/free和new/delete的區(qū)別


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区在线视频 | 热久久免费 | 亚洲天天综合色制服丝袜在线 | 中文字幕第页 | 国产高清免费视频 | 精品一区二区三区在线观看 | 日韩精品免费视频 | 夜夜爽日日澡人人 | 国产成人黄网在线免 | 久操成人| 国产在视频一区二区三区吞精 | 奇米成人网 | 免费观看一级特黄欧美大片 | 精品一区二区三区自拍图片区 | 国产chinese视频在线观看 | 亚洲在线播放 | 99久久精品免费看国产免费 | 天天爽夜夜爽夜夜爽 | www.99re14.com| 色七七网站 | 精品免费福利视频 | 超碰97人 | 亚洲欧美日韩综合一区久久 | 排球少年第四季 | 日一日干一干 | 在线观看视频一区 | 俄罗斯色妞18av | 日本香蕉一区二区三区 | 国产日韩精品入口 | 色网站在线免费观看 | 精品国产一区二区三区成人 | 欧美顶级毛片在线播放 | 毛片a级 | 欧洲怡红院 | 欧美日韩免费播放一区二区 | 超级碰碰碰频视频免费观看 | 国产一起色一起爱 | 精品在线不卡 | 国产特黄级AAAAA片免 | 亚洲视频在线观看免费 | 四季久久免费一区二区三区四区 |