日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 2029 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í)行構造函數(shù),對象在消亡之前要自動執(zhí)行析構函數(shù)。由于malloc/free是庫函數(shù)而不是運算符,不在編譯器控制權限之內(nèi),不能夠把執(zhí)行構造函數(shù)和析構函數(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模擬了構造函數(shù)的功能,函數(shù)Destroy模擬了析構函數(shù)的功能。函數(shù)UseMallocFree中,由于malloc/free不能執(zhí)行構造函數(shù)與析構函數(shù),必須調(diào)用成員函數(shù)Initialize和Destroy來完成初始化與清除工作。函數(shù)UseNewDelete則簡單得多。

所以我們不要企圖用malloc/free來完成動態(tài)對象的內(nèi)存管理,應該用new/delete。由于內(nèi)部數(shù)據(jù)類型的“對象”沒有構造與析構的過程,對它們而言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í)行析構函數(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條評論
主站蜘蛛池模板: 铜梁县| 慈溪市| 夏河县| 孟连| 高台县| 渭源县| 固阳县| 衢州市| 定兴县| 元氏县| 紫金县| 保定市| 阳西县| 凤山县| 涟源市| 新河县| 仪征市| 宁明县| 恩平市| 镇赉县| 江北区| 婺源县| 涞源县| 邹城市| 桑植县| 霸州市| 凤庆县| 军事| 和龙市| 安乡县| 安达市| 沭阳县| 彭山县| 淮南市| 留坝县| 达孜县| 尼玛县| 乡宁县| 吉水县| 车险| 庐江县|