C語言中的動態(tài)管理方式是用malloc、free函數(shù),它們在C++仍然可以繼續(xù)使用,但是由于在部分地方略顯無能為力,且使用起來比較麻煩,所以C++提出了自己的內(nèi)存管理方式:采用new、delete關鍵字去進行動態(tài)內(nèi)存管理。
十多年建站經(jīng)驗, 網(wǎng)站制作、網(wǎng)站設計客戶的見證與正確選擇。成都創(chuàng)新互聯(lián)提供完善的營銷型網(wǎng)頁建站明細報價表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。
注意:C語言開辟空間所用的malloc、calloc、free等,這些都屬于函數(shù),但是C++所使用的new和delete是關鍵字(或者說是運算符),這一點是本質(zhì)上的區(qū)別。
① malloc是按字節(jié)開辟內(nèi)存,返回值類型是void*,需要對返回值類型進行強轉(zhuǎn),只管開辟內(nèi)存,不進行初始化。初始化操作需要額外書寫。
而new在堆中開辟內(nèi)存時不僅可以指定其類型,還可以進行內(nèi)存初始化的操作。
② malloc內(nèi)存開辟是否成功是通過返回值與空指針nullptr去比較;
而new開辟內(nèi)存是否成功,是通過是否拋出bad_alloc類型的異常來判斷的。
當new申請內(nèi)存失敗時,會拋出bad_alloc異常,那么我們該如何去捕獲異常、如何去處理呢?
這里有篇文章可供參考:https://blog.csdn.net/qq_/article/details/
1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 // malloc開辟int類型變量的內(nèi)存空間 8 int *p = (int*)malloc(sizeof(int)); 9 if(p == nullptr) 10 { 11 return -1; 12 } 13 *p = 20; 14 free(p); 15 16 // new開辟int類型變量的內(nèi)存空間 17 int *p1 = new int (20); // int *p1 = new int (); 和 int *p1 = new int; 表示*p1初始值為0 18 delete p1; 19 20 /**********************************************************/ 21 22 // malloc開辟int類型數(shù)組的內(nèi)存空間 23 int *q = (int*)malloc(sizeof(int) * 20); 24 if(q == nullptr) 25 { 26 return -1; 27 } 28 free(q); 29 30 // new開辟int類型數(shù)組的內(nèi)存空間 31 int *q1 = new int[20](); // 20個 int sizeof(int) * 20 32 // int *q1 = new int[20]; 表示將數(shù)值全部初始化為0 33 delete [] q1; // 注意這里[]放在q1前面!??! 34 35 return 0; 36 }
文章標題:深入理解C++的new和delete
標題路徑:http://chinadenli.net/article24/dsoiije.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、微信公眾號、品牌網(wǎng)站建設、自適應網(wǎng)站、做網(wǎng)站、網(wǎng)站導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容