new和delete表示式

2021-04-13 02:14:32 字數 1737 閱讀 4649

1.系統為每個程式都提供了乙個在程式執行時可用的記憶體池.這個可用記憶體池被稱為程式的空閒儲存區(free store)或堆(heap) 

執行時刻的記憶體分配被稱為動態記憶體分配(dynamic memory allocation).

new表示式返回指向新分配的物件的指標.int *pi = new int;

從空閒儲存區中分配了乙個int型的物件,並且它的位址初始化pi.在空閒儲存區內實際分配的物件並沒有被初始化.

int *pi = new int(1024);它不但分配了這個物件而且用1024將其初始化.

string *psa = new string[10];

從空閒儲存區分配了乙個含有10個string 類物件的陣列,用它的位址初始化psa,然後依次在每個元素上呼叫string類的預設建構函式.

所有從空閒儲存區分配的物件都是未命名的,這是它的另乙個特點.new表示式並不返回實際被分配的物件,而且返回這個物件的位址.物件的所有操作都通過這個位址間接來完成.

當物件完成了使命時,我們必須顯式地把物件的記憶體返還給空閒儲存區.

1.系統為每個程式都提供了乙個在程式執行時可用的記憶體池.這個可用記憶體池被稱為程式的空閒儲存區(free store)或堆(heap) 

執行時刻的記憶體分配被稱為動態記憶體分配(dynamic memory allocation).

new表示式返回指向新分配的物件的指標.int *pi = new int;

從空閒儲存區中分配了乙個int型的物件,並且它的位址初始化pi.在空閒儲存區內實際分配的物件並沒有被初始化.

int *pi = new int(1024);它不但分配了這個物件而且用1024將其初始化.

string *psa = new string[10];

從空閒儲存區分配了乙個含有10個string 類物件的陣列,用它的位址初始化psa,然後依次在每個元素上呼叫string類的預設建構函式.

所有從空閒儲存區分配的物件都是未命名的,這是它的另乙個特點.new表示式並不返回實際被分配的物件,而且返回這個物件的位址.物件的所有操作都通過這個位址間接來完成.

當物件完成了使命時,我們必須顯式地把物件的記憶體返還給空閒儲存區.

2.顯式轉換:

也被叫做強制轉換(cast)包括下列命名的強制型別轉換操作符:

static_cast,dynamic_cast,const_cast,reinterpret_cast.

void*型的指標被稱為泛型(generic)指標,因為它可以指向任意資料型別的指標.void*型指標不能直接被解除引用,因為沒能型別資訊可用來指導編譯器怎樣解釋底層的位模式.相反,void*的指標必須先被轉換成某種特定型別的指標.

在c++中不存在從void*型指標到特殊型別的指標之間的自動轉換.例如:

int ival; int *pi =0;

char *pc =0;

void *pv;

pv = pi;pv=pc;//隱式轉換

顯式轉換符號的一般形式如下:

cast-name(expression);

cast-name is static_cast,const_cast,dynamic_cast,reinterpret_cast

reinterpret_cast通常對於運算元的位模式執行乙個比較低層次的重新解釋,它的正確性很大程式上依賴於程式設計師的主動管理.

用reinterpret_cast操作符來執行並標識出所有的顯式指標強制轉換是很有用的.

dynamic_cast支援在執行時刻識別由指標或引用指向的類物件.

C 的new和delete表示式

定義變數時,必須指定其資料型別和名字,而建立動態物件時只需要指定其資料型別,而不必為該物件命名 int i int pi new int 這個new表示式在自由儲存區中分配建立了乙個整形物件,並返回次兌現光額位址,並用改位址初始化pi 1.動態建立的物件可以用初始化變數的方式實現初始化 int i ...

c 寒假學習 new與delete表示式

一 new表示式工作步驟 使用new表示式時發生的三個步驟 呼叫名為operator new的標準庫函式,分配足夠大的原始的未型別化的記憶體,以儲存指定型別的乙個物件 執行該型別的乙個建構函式初始化物件 返回指向新分配並構造的建構函式物件的指標 二 nedelete表示式工作步驟 使用delete表...

定位new表示式

定位new表示式使我們能在特定的 已分配的記憶體位置構造物件,它接受指向已分配記憶體但未構造記憶體的指標,並在該指標位置構造乙個物件。他是allocator中的construct成員函式的低階選擇 new place address type new place address type initi...