c 中new與delete的用法小結

2021-05-27 06:04:47 字數 1417 閱讀 8835

1.首先分析下new與operator new 的區別

(1). string *ps=new string("memory");

這裡所使用的new就是所謂new operator,是由c++語言內建的,不能改變意義,總是做相同的事情。

這個動作的含義分為兩方面:

第一,它分配足夠的記憶體,用來放置某型別的物件。對於上例而言,它分配足夠放置乙個string 物件記憶體。

第二,它呼叫乙個建構函式,為剛才分配的記憶體中的那個物件設定初始值。

不能改變其行為。

(2) 能夠被重寫或者過載的函式是operator new 

函式 operator new 通常宣告如下:

void * operator new (size_t size);

其返回型別void*。即返回乙個指標,指向一塊原始的、未設定初始值的記憶體。

函式中的size_t引數表示需要分配多少記憶體,你可以將operator new 過載,加上額外的引數,但第乙個引數型別必須總是size_t。

它不呼叫建構函式,只是簡單分配記憶體空間。

string *fu = (string *)operator new(sizeof(string));

//cout << (string)(*fu) << endl;      //wrong

string temp = "fuxinghua";

fu = &temp;

cout << (*fu) << endl;

(3)placement new 再指定記憶體空間建立物件,並且呼叫建構函式

基本格式為:

a *p = new (ptr)a

例如:

#include#includeusing namespace std;

class a

void show()

};int main()

(4)用new分配二維陣列

在實現過程中不能簡單的int   **a  = new int[5][6];  // wrong

主要有三種方法:

a) int (*a)[n] = new int [m][n];   // n必須為已知

b)   int ** ga = new int *[6];

for(int i = 0 ;i<6;i++)

for(int i = 0; i < 6; i++)

delete ga[i];

delete ga;

直觀但是比較繁瑣

c) int *a = new int [m*n];

連續儲存,不夠直觀

2.delete的用法就比較簡單了,但是,每乙個動態分配行為都必須匹配乙個相應的釋放動作

(1) delete a;   //釋放單個int的空間

(2)delete a; // 釋放陣列

C 中new與delete的用法

最近在學習c 的過程中,發現指標以及new和delete的使用遍布全書,可見其重要性。在學習了乙個階段之後,總結一下new和delete的用法,指標還沒有摸透,待日後總結。new和delete是c 中的兩個操作符,new用於給單個物件或者陣列,結構等分配記憶體,在記憶體使用完後,用delete進行釋...

C 中new和delete的用法

首先,new和delete運算子是用於動態分配和撤銷記憶體的運算子。一 new用法 1.開闢單變數位址空間 使用new運算子時必須已知資料型別,new運算子會向系統堆區申請足夠的儲存空間,如果申請成功,就返回該記憶體塊的首位址,如果申請不成功,則返回零值。new運算子返回的是乙個指向所分配型別變數 ...

C 中new和delete的用法

c 中new和delete的用法 對於計算機程式設計而言,變數和物件在記憶體中的分配都是編譯器在編譯程式時安排好的,這帶來了極大的不便,如陣列必須大開小用,指標必須指向乙個已經存在的變數或物件。對於不能確定需要占用多少記憶體的情況,動態記憶體分配解決了這個問題。new和delete運算子是用於動態分...