new/delete和malloc/free的区别(举例说明)(简单点)
生活随笔
收集整理的這篇文章主要介紹了
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只能成對使用,不能混了。
好 我簡單的說下,樓上說的很多了,我也發表一點愚見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的区别(举例说明)(简单点)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOCP之accept、AcceptEx
- 下一篇: new/delete和malloc/fr