malloc申請而來的只是記憶體,嚴格地說並不是「物件」,new/delete的引用就是要解決malloc帶來的問題
//4個int,16個位元組
在c++中,用new/delete操作符取代malloc/freeint *p=(int *)malloc(16);
for(int i=0;i<4;i++)
申請乙個物件:
釋放int * p=new
int;
delete p;
注意:
1. new的返回值直接就是物件指標,不用再轉換
2. new的時候可以設初始值 new int(12);
申請多個物件
注意://申請1024個int物件
int *p=new
int [1024];
delete p;
1. 用指定物件個數
2. 如果new的時候用了,則釋放的時候使用delete 操作符
例子:
申請乙個student物件大小的空間
使用原則:struct student
student *s=new student;
s->id=12;
strcpy(s->name,"dadi");
//用完之後,釋放
delete s;
使用原則與malloc/free類似,都是向記憶體管理器mm來申請記憶體。
1. 用new申請的記憶體,必須用delete釋放
2. 用new申請的記憶體,必須使用delete 釋放
3. 用完之時,及時釋放
注意:
和free一樣,delete之後指標所指向的記憶體不再可用
問題:delete p之後,p的值會發生改變嗎?delete p;
p = null;//最好置為空指標
答案:不會發生變化,還是指向這記憶體,只是不是我們所用
new 與malloc申請記憶體區別
首先我們需要了解堆與棧的概念。區分堆記憶體與棧記憶體的區別。以及堆與棧訪問速度的差異的原因。1.屬性 new delete是c 關鍵字,需要編譯器支援。malloc free是庫函式,需要標頭檔案支援。2.引數 使用new 操作副申請記憶體分配時無須制定記憶體塊的大小,編譯器會根據型別資訊自行計算。...
new和delete分配記憶體
一.當記憶體用完時 當找不到足夠大的連續的記憶體塊用於存放物件時,乙個稱為new handler的函式被呼叫,或者檢查指向函式的指標,如果非0,則那個函式被呼叫 new handler的預設動作是丟擲乙個異常。通過包含new.h,然後以我們想呼叫的函式位址為引數,呼叫set new handler ...
delete釋放new 開闢的記憶體
直接看下面這道題 使用 char p new char 10 申請一段記憶體,然後使用delete p釋放,有什麼問題?a 會有記憶體洩露 b 不會有記憶體洩露,但不建議用 c 編譯就會報錯,必須使用delete p d 編譯沒問題,執行會直接崩潰 這道題題目開闢的是10個char型別的空間,因為是...