通俗易懂版本:http://zhidao.baidu.com/question/86185100
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只能成對使用,不能混了。
其餘版本:html