使用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 (建構函式 析構函式 動態申請空間)
include include using namespace std 整型陣列 class intarray 動態陣列 修改元素 void intarray mod int index,int value 定位指定下標元素 int intarray at int index 構造方法 intarr...
C語言動態申請
由於陣列在宣告的時候總要顯式的指定乙個長度,容易造成空間浪費或者空間不夠用,使用不夠靈活,所以使用了動態的申請 動態空間與直接宣告的變數不同,直接宣告的變數在棧記憶體中,當 塊執行完畢,棧記憶體的變數會自動釋放 但是動態申請的變數在堆記憶體中,塊執行完畢後如果不手動釋放這塊記憶體,它也仍然被占用,就...
順序表的動態申請空間版本
順序表的動態申請空間版本 動態順序表仍需建立乙個結構體 typedef int datatype 定義datatype型別 typedef struct seqlist seqlist,pseqlist 每次插入新元素時,都需判斷是否現有空間已滿,所以用checkcapacity 函式來檢測容量,所...