C++內(nèi)存分配有兩種:靜態(tài)分配和動態(tài)分配。
舉個(gè)簡單的例子如下
int a=1024;
對象a的內(nèi)存空間就是靜態(tài)分配的,是在編譯器對程序進(jìn)行編譯時(shí)分配的,當(dāng)然對它空間的回收也是編譯器自動完成的,開發(fā)者只需要知道這個(gè)事實(shí)就好,不需要我們顯示的回收。

int *p=new int(1024);
先來說下這句程序的意思:現(xiàn)在分配一個(gè)新的空間給一個(gè)沒有名字的Int型對象,并且為這個(gè)空間賦予初始化數(shù)值為1024。由于該Int型對象沒有名字,所以如果需要訪問它的話,就需要使用指針來指向該對象所在的內(nèi)存地址。注意,new int(1024)這個(gè)表達(dá)式返回的是該沒有名字的對象的內(nèi)存地址。

int *p=new int[1024];
這個(gè)和上面的就有點(diǎn)不一樣了。可以看的出,這個(gè)是動態(tài)分配數(shù)組,這個(gè)P叫數(shù)組指針。意思是什么呢:現(xiàn)在分配新的空間給數(shù)組里面的1024個(gè)元素,但是這1024個(gè)元素我們沒有辦法顯式的為它們分配初始化數(shù)值。并且這個(gè)指針只指向這個(gè)數(shù)組第一個(gè)元素的地址。如果想要訪問其他數(shù)組元素,可以用*p++來實(shí)現(xiàn)。

既然上面兩個(gè)new 都是動態(tài)分配的,那么自然需要手動刪除所分配的空間了。
第一個(gè)是 delete p;
第二個(gè)是 delete[] p;