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運算子是用於動態分...