1樓:小資料的分析
參考以下程式分析說明 new 和 malloc 的區別:
1#include
2#include
3#include
4using namespace std;
5class t
69 ~t()
10 };
11int main()
12解答:
由第13、14行**可見,new,malloc均能完成動態分配乙個新的空間的功能,並把它的首位址交給乙個指標。區別在於:
1. new直接寫在型別t的前面,是c++中的乙個操作符,且直接分配t大小的記憶體空間。而malloc是c中的乙個函式,且需要借助於函式sizeof幫其判斷t型別的大小;
2. new直接返回乙個t型別的指標,而且會呼叫類中的建構函式。而malloc返回乙個void指標,需要在前面對其強制定義為乙個t型別的指標,不用呼叫建構函式。
3. new與delete搭配使用,delete會呼叫類中的析構函式對記憶體進行釋放。malloc則與free搭配,不呼叫析構函式。
2樓:
這是c/c++欄目吧⋯⋯我覺得它可能問的是c/c++裡面這兩個的不同
總體來說malloc是c語言的,new是c++的,區別還是很大的,首先來說第一點,c語言因為用不了new只能用malloc所以不說,但是c++是都可以用,不過應該只用new而不用malloc幾乎沒有例外
返回值有區別,假設malloc分配記憶體失敗會返回空指標,一般是null,如果new分配失敗那麼會throw乙個異常,叫std::bad_alloc,這是乙個最大的區別,當然了一般在例如windows系統下大部分時候可以認為記憶體是無限的,分配失敗的情況很少發生
malloc和new的區別是什麼?
3樓:次次次蛋黃公尺亞
malloc和new從申請的記憶體所在位置、返回型別安全性、記憶體分配失敗時的返回值、是否需要指定記憶體大小這四點區分。
1、申請的記憶體所在位置不同
new操作符從自由儲存區(free store)上為物件動態分配記憶體空間。自由儲存區是c++基於new操作符的乙個抽象概念,凡是通過new操作符進行記憶體申請,該記憶體即為自由儲存區。
malloc函式從堆上動態分配記憶體。堆是作業系統中的術語,是作業系統所維護的一塊特殊記憶體,用於程式的記憶體動態分配,c語言使用malloc從堆上分配記憶體,使用free釋放已分配的對應記憶體。
2、返回型別安全性不同
new操作符記憶體分配成功時,返回的是物件型別的指標,型別嚴格與物件匹配,無須進行型別轉換,故new是符合型別安全性的操作符。
malloc記憶體分配成功則是返回void * ,需要通過強制型別轉換將void*指標轉換成我們需要的型別。
3、記憶體分配失敗時的返回值不同
new記憶體分配失敗時,會丟擲bac_alloc異常,它不會返回null。
malloc分配記憶體失敗時返回null。
4、是否需要指定記憶體大小不同
使用new操作符申請記憶體分配時無須指定記憶體塊的大小,編譯器會根據型別資訊自行計算。
malloc則需要顯式地指出所需記憶體的尺寸。
4樓:
malloc 是c語言的標準庫函式,它實現了在堆記憶體管理中進行按需分配的機制,但是它不提供在c++中對像構造的支援,而new 則是乙個 在c++中同時完成堆記憶體按需分配支援和對像構造功能的運算子,由於c++中的運算子功能較c中的運算子在意義上作了擴充套件的,可以理解成函式呼叫 。 malloc則是底層的,new的實現中是呼叫了malloc來實現堆記憶體的統一管理的,因此,可以認為new 是malloc的擴充套件同根版,而且單從記憶體分配的功能上來說,它們是在同一塊記憶體區域內實現統一管理的
5樓:匿名使用者
malloc是c語言裡面申請記憶體空間的方法
new是c++裡面申請記憶體空間的方法,幾乎一樣
6樓:匿名使用者
1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。
2,對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。
3,因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。
4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體。
5、new可以認為是malloc加建構函式的執行。new出來的指標是直接帶型別資訊的。而malloc返回的都是void指標。
一:new delete 是運算子,malloc,free是函式
malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。
對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。
因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。
c中malloc與new的區別
7樓:
new更強大,在c++裡就用new.
一般的分配記憶體空間,兩者都可以,看你喜歡了。
8樓:帥得有點壞
1、new 是c++中的操作符,malloc是c 中的乙個函式2、new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的析構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫析構函式
3、記憶體洩漏對於malloc或者new都可以檢查出來的,區別在於new可以指明是那個檔案的那一行,而malloc沒有這些資訊。
4、new 和 malloc效率比較
new 有三個字母, malloc有六個字母new可以認為是malloc加建構函式的執行。
new出來的指標是直接帶型別資訊的。
而malloc返回的都是void指標。
new和malloc的區別 csdn
9樓:
1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。
2, 對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。
3,因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。
4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體 new 是個操作符,和什麼"+","-","="...有一樣的地位 簡單的說: malloc,free是c的函式,new,delete是c++的運算子 此外,new是強制型別的,malloc不是,需要型別轉換 當然還有很多不同 new 可以呼叫建構函式在宣告的時候初始化 malloc只是分配空間,需要在其他地方初始化 而delete不僅會釋放空間,在釋放前會呼叫析構函式 而且malloc需要指定分配空間大小, 而new是自動計算的
new/delete 和malloc/free 的區別一般彙總
10樓:雨過天晴日丶
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只能成對使用,不能混了。
11樓:
malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。
對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。
因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。
我們先看一看malloc/free和new/delete如何實現物件的動態記憶體管理,見示例7-8。
class obj
~obj(void)
void initialize(void)
void destroy(void)
};void usemallocfree(void)
void usenewdelete(void)
示例7-8 用malloc/free和new/delete如何實現物件的動態記憶體管理
類obj的函式initialize模擬了建構函式的功能,函式destroy模擬了析構函式的功能。函式usemallocfree中,由於malloc/free不能執行建構函式與析構函式,必須呼叫成員函式initialize和destroy來完成初始化與清除工作。函式usenewdelete則簡單得多。
所以我們不要企圖用malloc/free來完成動態物件的記憶體管理,應該用new/delete。由於內部資料型別的「物件」沒有構造與析構的過程,對它們而言malloc/free和new/delete是等價的。
既然new/delete的功能完全覆蓋了malloc/free,為什麼c++不把malloc/free淘汰出局呢?這是因為c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體。
如果用free釋放「new建立的動態物件」,那麼該物件因無法執行析構函式而可能導致程式出錯。如果用delete釋放「malloc申請的動態記憶體」,理論上講程式不會出錯,但是該程式的可讀性很差。所以new/delete必須配對使用,malloc/free也一樣。
new3dsll和new3ds有什麼區別?
大小區別,小的可以換殼,大的屏大看著舒服,配置一樣的。3dsll和new3dsll區別 摘要。3dsll和new3dsll主要有效能 硬體 遊戲數量 3d體驗這幾種區別。1 效能上的區別 new3dsll 3d效果是全視角的,不像3dsll一定要在特定角度看,電池電量 執行速度 攝像頭清晰度等跟 3...
ma和mon的區別是什麼啊,法語中ma mon me 三者的區別?尤其是me是什麼時候用的?
ma mon 都是 我的 的意思。是法語中的主有形容詞,表領屬關係,內作用相當於英語中的形容容詞性物主代詞my 我的 區別是後面加的是陰性名詞還是陽性名詞。ma 陰性單數名詞 例 我的媽媽 ma m re 我的 ma photo mon 陽性單數名詞 例 我的爸爸 mon p re 我的自行車 mo...
三菱刀片槽型MA和MS什麼區別
數控刀具是指與先進高效的數控機床相配套使 用的各種刀具的總稱,是數控機床不可缺少的關鍵配套產品,數控刀具以其高效 精密 高速 耐磨和良好的綜合切削效能取代了傳統的刀具,再先進的數控機床沒有刀具尤如一堆廢鐵,有了刀具,但不具備與先進數控機床相匹配的良好切削效能,數控機床的使用效率會大打折扣,數控機床不...