欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 狠狠色丁香婷婷久久 | 2018天天操夜夜操 | 国产在线小视频 | 欧美激情久久久久久久久 | 亚洲成av人片在线观看 | 夜夜爽天天狠狠九月婷婷 | 国产激情91久久精品导航 | 久久国产精品久久 | 亚洲国产aⅴ成人精品无吗 最新国产网址 | 国产福利区一区二在线观看 | 美国av在线免费观看 | 国产AV一区二区三区传媒 | 国产午夜福利视频一区二区32页 | 国产精品久久久久免费视频 | 久久99精品久久久久久琪琪 | 亚洲综合一区二区三区 | 成人久久18免费软件 | 欧美国产精品一区二区免费 | 99pao成人国产永久免费视频 | 黑人性猛交xxxx乱大交一 | 成人在线不卡视频 | 国产精品久久久久久免费 | 成年人在线观看视频 | 精品国产18久久久久久二百 | 亚洲一区二区三区深夜天堂 | 狠狠插综合 | 国产精品久久一区二区三区 | 国产乱子轮XXX农村 日本中文字幕一区 | 又黄又爽的网站 | www.99re| 久久综合九色综合欧美狠狠 | 看免费大片 | 欧美精品在线不卡 | www97影院| 久久国产精品久久 | 一级毛片免费播放视频 | 在线观看av片| 4hu44四虎在线观看 | 亚洲热视频 | 午夜小视频在线观看 | 亚洲v日韩v综合v精品v |