使用new申請空間:
特點:
1、沒有名字,只能通過指標間接訪問它們。
2、從堆中申請空間
分類:
變數:
語法:指標變數 = new 型別名;
delete 指標變數
舉例:int *p;
p=new int;
delete p;
初始化:
*p=90;
p=new int(99);
一維陣列:
語法:指標變數 = new 型別名[下標表示式]; 下標表示式是整型常量或整型表示式
delete [ ]指標變數;---[ ]表明是個陣列,但不需要指出其大小
舉例:int *p;
p= new type[s];
delete [ ]p;
多維陣列(二維陣列): 必須指出所有維的長度
語法:指標變數 = new 型別名[下標表示式] [下標表示式];
delete [ ]變數名
舉例:定義乙個3×4的陣列
int (*p)[4]; p是個指標,它指向乙個n維陣列(4定義的時候必須已知,即後幾維必須已知)
p=new int[3][4];// 第一維可以是常量或表示式,其他維必須全部為常量
delete [ ]p;
物件:可以在建立物件的時候同時進行初始化
語法: 類名 *指標變數 = new 類名(實參表);
物件陣列:
語法:類名 陣列名[元素個數];
或: 類名* 指標名;指標名=new 類名[陣列長度];
舉例:point a[2];
point* p;
*p=new point[5];
delete [ ]p;
初始化:每個物件都要呼叫一次建構函式和一次析構函式。
1)物件陣列確定且長度有限:可以使用引數列表初始化
point a[2]=;
2)物件陣列長度比較大或不確定:只能呼叫無參或者使用預設引數的函式
point a[2];
原因:在建立物件陣列的時候,c++不允許整體對物件進行初始化(即[ ]和( )不能一起使用),這時不能給物件 使用有引數的建構函式
所以:若建立乙個類的物件陣列,就對給類的建構函式有要求:物件陣列只能呼叫乙個不需要引數的建構函式
常見問題:
1):有了malloc/free 為什麼還要new/delete?
malloc/free 只能滿足內部資料型別的變數,它們只需要申請空間,無法對空間進行操作
而對於非內部資料型別的物件來說,物件在建立的同時要自動執行建構函式,在消亡之前要自動執行析構函式。
由於malloc/free 是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠自動地呼叫建構函式和析構函式。即用無法滿足動態物件的要求。
因此 c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete。
注意new/delete 不是庫函式,而是運算子。malloc/free 是標準庫函式。
2):malloc/free 和 new/delete 的相同點和不同點
相同點:它們都可以申請和釋放空間。
不同點:
一、new :分配記憶體 + 呼叫類的建構函式 + 初始化 delete:釋放記憶體 + 呼叫類的析構函式
malloc:只分配記憶體,不會進行初始化類成員的工作 free只釋放記憶體,不會呼叫析構函式
二、new delete 是運算子,可以進行過載
malloc,free是函式,不可以進行過載
三、new delete 更加安全,簡單:
不用計算型別大小:自動計算要分配儲存區的位元組數
不用強制型別轉換:自動返回正確的指標型別
四、new可以分配乙個物件或物件陣列的儲存空間,malloc不可以
五、可以超載與類相關的new和delete
六、malloc/free 是標準庫函式,new/delete是c++運算子
2):new和delete搭配使用,malloc和free搭配使用:混搭可能出現不可預料的錯誤
3):new後執行的三個操作:(某面試題目)
1、new的類分配記憶體空間。
2、 呼叫類的構造方法。
3 、返回該例項(物件)的記憶體位址
C 之儲存空間的動態分配和釋放
很多時候,我們需要根據問題的實際規模來定義陣列的大小,即確定實際需要使用的儲存空間的大小,這個時候就要用到動態申請 釋放儲存空間的方法。一般情況下,變數儲存空間的分配和釋放是由系統自動完成的,不需要我們的干預。系統對自動分配記憶體的變數的訪問方式有兩種 在程式執行中動態申請 釋放記憶體的變數,只能通...
儲存空間的分配和釋放
在c語言中,記憶體分配提供了四個函式,malloc 函式 calloc 函式 realloc 函式和free 函式,用來實現記憶體的動態分配和釋放。這四個函式屬於stdlib.h這個庫函式中,其中malloc 函式 calloc 函式和realloc 函式都用於動態儲存分配,但有所差別,free 函...
動態儲存空間分配
include include include c 操作符new用來進行動態記憶體分配 他的值為乙個指標指向所分配的空間 c 操作符delete 用來釋放由操作符new所分配的空間 int y new int,y 10 或者int y new int 10 或者 int y y new int 10...