日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

              歡迎訪問 生活随笔!

              生活随笔

              當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

              编程问答

              new/delete和malloc/free的区别(举例说明)(简单点)

              發布時間:2025/3/21 编程问答 32 豆豆
              生活随笔 收集整理的這篇文章主要介紹了 new/delete和malloc/free的区别(举例说明)(简单点) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

              先說說區別: 1. new/delete是C++里才有的。 2. new/delete通常來說是操作符,就是"+","-"一樣。 3. new/delete是可以重載的,而重載之后,就成為了函數。 4. malloc在申請內存的時候,必須要提供申請的長度,而且返回的指針是void*型,必須要強轉成需要的類型。 5. 當new/delete在類中被重載的時候,可以自定義申請過程,比如記錄所申請內存的總長度,以及跟蹤每個對象的指針。 6. new/delete,其實內部也調用了malloc/free。 共同點: 1. 都必須配對使用。 2. 都是申請內存,釋放內存。 3. free和delete可以釋放NULL指針。 注意點: new/delete與malloc/free不能混合使用。舉幾個簡單的例子吧: int* pn = (int*)malloc(sizeof(int)); *pn = 15; free(pn); pn = NULL; // 置空 free(pn); // OK,沒有問題 double* pd = new double; *pd = 212.211; delete = pd; short* ps = new short[128]; // new出一個數組來 ps[1] = 1231; ps[11] = 1111; delete[] ps; // 請注意delete的語法。// 以下是一個重載new操作符的例子,一般來說是不會用到的,除非要設計一個編譯器之類的東西。 class Sample { public:static CSample* operator= new(){CSample* p = (CSample*)malloc(size(Sample));return p;} }

              好 我簡單的說下,樓上說的很多了,我也發表一點愚見1 我認為new\delete和malloc\free最大區別是對對象的理解。 如果你使用 Foo* foo = malloc(sizeof(Foo));//Foo是一個類 初始化,那么你將不會調用Foo的構造方法,而只是單純的分配空間。而且我們只認為你是分配一個空間,而不是想創建一個對象。 Foo* foo = new Foo();則會調用Foo的構造方法來初始化對象,也就是說你既要分配空間又要初始化這段空間,讓它變成一個對象。 對于delete和free也有同樣的問題,就是delete會調用析構函數,free則不會。 說白了,new\delete玩的是對象,而malloc\free僅僅是內存空間而已2 對于除去對象意外的其他情況,比如int和float等 int* Array=new int[10];和int* Array=malloc(sizeof(int)*10);只存在使用技巧的差別,沒有本質的差別。3 最后也提醒你new\delete和malloc\free只能成對使用,不能混了。

              總結

              以上是生活随笔為你收集整理的new/delete和malloc/free的区别(举例说明)(简单点)的全部內容,希望文章能夠幫你解決所遇到的問題。

              如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。