1 new和delete基本語法
1 new和delete基本語法
1)在軟體開發過程中,常常需要動態地分配和撤銷記憶體空間,例如對動態鍊錶中結點的插入與刪除。在c語言中是利用庫函式malloc和free來分配和撤銷記憶體空間的。c++提供了較簡便而功能較強的運算子new和delete來取代malloc和free函式。
注意:new
和delete
是運算子,不是函式,因此執行效率高。 2
)雖然為了與
c語言相容,
c++仍保留
malloc
和free
函式,但建議使用者不用
malloc
和free
函式,而用
new和
delete
運算子。new運算子的例子:
new int; //開闢乙個存放整數的儲存空間,返回乙個指向該儲存空間的位址(即指標)
new int(100); //開闢乙個存放整數的空間,並指定該整數的初值為100,返回乙個指向該儲存空間的位址
new char[10]; //開闢乙個存放字元陣列(包括10個元素)的空間,返回首元素的位址
new int[5][4]; //開闢乙個存放二維整型陣列(大小為5*4)的空間,返回首元素的位址
float *p=new float (3.14159); //開闢乙個存放單精度數的空間,並指定該實數的初值為將返回的該空間的位址賦給指標變數p
3)new和delete運算子使用的一般格式為:
用new
分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則
new會返回乙個空指標
null
,使用者可以根據該指標的值判斷分配空間是否成功。
1) 應用舉例
2 類物件的動態建立和釋放
使用類名定義的物件都是靜態的,在程式執行過程中,物件所佔的空間是不能隨時釋放的。但有時人們希望在需要用到物件時才建立物件,在不需要用該物件時就撤銷它,釋放它所佔的記憶體空間以供別的資料使用。這樣可提高記憶體空間的利用率。
c++中,可以用new運算子動態建立物件,用delete運算子撤銷物件
比如:box *pt; //定義乙個指向box類物件的指標變數pt
pt=new box; //在pt中存放了新建物件的起始位址
在程式中就可以通過pt訪問這個新建的物件。如
cout
cout
c++還允許在執行new時,對新建立的物件進行初始化。如
box *pt=new box(12,15,18);
這種寫法是把上面兩個語句(定義指標變數和用new建立新物件)合併為乙個語句,並指定初值。這樣更精煉。
新物件中的height,width和length分別獲得初值12,15,18。呼叫物件既可以通過物件名,也可以通過指標。
在執行new
運算時,如果記憶體量不足,無法開闢所需的記憶體空間,目前大多數
c++編譯系統都使
new返回乙個
0指標值。只要檢測返回值是否為
0,就可判斷分配記憶體是否成功。
ansi c++標準提出,在執行new出現故障時,就「丟擲」乙個「異常」,使用者可根據異常進行有關處理。但c++標準仍然允許在出現new故障時返回0指標值。當前,不同的編譯系統對new故障的處理方法是不同的。
在不再需要使用由new建立的物件時,可以用delete運算子予以釋放。如
delete pt; //釋放pt指向的記憶體空間
這就撤銷了pt指向的物件。此後程式不能再使用該物件。
如果用乙個指標變數
pt先後指向不同的動態物件,應注意指標變數的當前指向,以免刪錯了物件。在執行delete運算子時,在釋放記憶體空間之前,自動呼叫析構函式,完成有關善後清理工作。
new和delete深入分析
#include using namespace std;
// 1
// malloc free c語言的函式
// new delete 操作符 c++的語法
//2 new 基礎型別變數 分配陣列變數 分配類物件
//3
分配基礎型別
void main01()
{ //
int *p = (int *)malloc(sizeof(int));
*p = 10;
//free(p);
delete p;
int *p2 = new int; //分配基礎型別
*p2 = 20;
free(p2);
// int *p3 = new int(30);
printf("*p3:%d \n", *p3);
//delete p3;
free(p3);
cout<
物件的動態建立和釋放
new 動態地分配記憶體 delet 釋放記憶體 用new建立的物件只能通過指標訪問,建立物件時執行建構函式,有時候會出現記憶體不足,會出現異常。不再需要由new建立的物件時,用delete運算子釋放。否則會造成記憶體洩漏的情況。在釋放記憶體空間之前,自動呼叫析構函式,完成有關善後清理的工作。也就是...
C 物件的動態建立和釋放
使用類名定義的物件 請檢視 c 類的宣告和物件的定義 都是靜態的,在程式執行過程中,物件所佔的空間是不能隨時釋放的。但有時人們希望在需要用到物件時才建立物件,在不需要用該物件時就撤銷它,釋放它所佔的記憶體空間以供別的資料使用。這樣可提高記憶體空間的利用率。在c 中,可以使用new運算子動態地分配記憶...
物件的動態建立和釋放(new delete)
c malloc free c new delete 在c語言中malloc只會分配記憶體大小,不會呼叫類的建構函式,free不會呼叫類的析構函式 main cint p int malloc sizeof int p 10 free p int a int malloc sizeof int 10...