儘量以new和delete取代malloc和free

記得一次面試被問到new和malloc的區別,答曰:new是一個操作符,malloc是一個函數。面試官曰:也就是沒有區別是吧!暈,難道我說的不是區別嗎?看來我沒有說到他想聽到的東西。也罷,平常書讀的少了,思考的也不多,對這些問題總是說不到本質上去。所以勵志讀遍IT界的大牛神書,多多的思考,多多的實踐!

malloc和free是C語言中提供我們用於堆內存分配的庫函數,那時還沒有C++的構造函數,析構函數的概念,也就對它們一無所知。

欲取得10個string對象所形成的數組空間,有兩種方法

string *stringArray1 = static_cast<string*>(malloc(10*sizeof(string)));

string *stringArray2 = new string[10];

兩者的區別是stringArray1將指向能夠放置10個string對象的內存空間,但其中沒有任何對象被初始化。

stringArray2指向由10個構造妥當的string對象所構成的數組,每一個元素都可以被安全的運用於任何需要string的行動上。

在釋放到內存時我們會這樣做:

free(stringArray1);

delete [] stringArray2;

free會釋放掉stringArray1所指的內存,但不會調用其中的string對象的destructors。要命的地方在於如果string對象本身亦配置有內存,那麼那些內存就全部遺失了。但如果以delete施加於stringArray2身上,在內存被釋放之前,數組中的每一個對象的destructor都會被調用一遍。

最後需要注意的是new/deelte,malloc/free要配對,切忌混用。混用時會有“未定義”的錯誤。

所謂“未定義”的意思是:它在開發階段沒有問題,它在測試階段沒有問題,但是它會在你最重要的客戶面前突然爆發。

發佈了41 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章