c 特有的動態分配記憶體new操作符

2021-07-29 12:50:06 字數 1313 閱讀 5632

通過new來動態分配記憶體並返回分配的記憶體首位址。

例如: int *ps=new int ;

或者開闢乙個記憶體塊

int *pt=new int [10];

同樣動態分配的記憶體 使用過後要記得**給系統,用delete 釋放

#include

using

namespace

std;

int main()

使用new ,delete要遵循以下規則:

1.不要使用delete來釋放不是new分配的空間。

2.不要使用delete釋放兩次記憶體塊。

3.new ,delete 和new [ ] ,delete [ ]要匹配使用。

4.對空指標null使用 delete 是安全的。

對於乙個類來說 ,要用new給它的物件分配空間,就必須調該類的建構函式,建立出的物件如果系統不再使用的時候用delete來釋放空間 就也要呼叫該類的析構函式來銷毀物件。下面詳細分析:

#include

using

namespace

std;

class test

~test()

private:

int _data;

};int main()

以上程式執行的結果為:

new分配記憶體的時候調了建構函式,delete銷毀的時候調了析構函式。

但是delete不是每次都調析構函式,在以下情況下析構函式會被呼叫:

1.物件是動態的,則執行完成定義該物件的程式塊時,將呼叫該物件的析構函式。

2.如果物件是靜態物件時,結束時呼叫。

3.物件是new創立的,並且當顯式使用delete刪除物件時,析構函式才會被呼叫。

new test [5]的時候會多申請test個位元組用來存放5 也就是建立物件的個數,以便以後釋放的時候釋放。

delete 的時候會先取存放的物件的個數((int )ps -1)==n

再析構物件 for迴圈析構n次 釋放。

最後關於定位new表示式

int array[10];

array[4]=0;

就等價於 new (array+4) int(4)

定位new表示式可以在已經開闢好的記憶體上建立物件,呼叫建構函式。

原型為 operator new(size_t ,where) where為該記憶體的首位址。

new動態分配記憶體(在堆上)

利用new生成動態無名變數 例如 int p1 double p2 p1 new int 12 1 p2 new double 100 2 delete p1 delete p2 1 分別表示動態分配了用於存放整型資料的記憶體空間,將初值12寫入該記憶體空間,並將首位址值返回指標p1。2 動態分配了...

New動態分配 Delete 釋放記憶體

在c 中,對於變數和物件都是編譯器在編譯時分配好的,對於陣列初始化時,無法確定多少記憶體,很容意造成大開小用的情況。new 動態分配 一般格式 1.指標變數名 new 型別識別符號 2.指標變數名 new 型別識別符號 初始值 3.指標變數名 new 型別識別符號 記憶體單元個數 開闢陣列的定義方法...

記憶體動態分配

陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...