C++內(nèi)存分配有兩種:靜態(tài)分配和動態(tài)分配。
舉個簡單的例子如下
int a=1024;
對象a的內(nèi)存空間就是靜態(tài)分配的,是在編譯器對程序進行編譯時分配的,當然對它空間的回收也是編譯器自動完成的,開發(fā)者只需要知道這個事實就好,不需要我們顯示的回收。
int *p=new int(1024);
先來說下這句程序的意思:現(xiàn)在分配一個新的空間給一個沒有名字的Int型對象,并且為這個空間賦予初始化數(shù)值為1024。由于該Int型對象沒有名字,所以如果需要訪問它的話,就需要使用指針來指向該對象所在的內(nèi)存地址。注意,new int(1024)這個表達式返回的是該沒有名字的對象的內(nèi)存地址。
int *p=new int[1024];
這個和上面的就有點不一樣了。可以看的出,這個是動態(tài)分配數(shù)組,這個P叫數(shù)組指針。意思是什么呢:現(xiàn)在分配新的空間給數(shù)組里面的1024個元素,但是這1024個元素我們沒有辦法顯式的為它們分配初始化數(shù)值。并且這個指針只指向這個數(shù)組第一個元素的地址。如果想要訪問其他數(shù)組元素,可以用*p++來實現(xiàn)。
既然上面兩個new 都是動態(tài)分配的,那么自然需要手動刪除所分配的空間了。
第一個是 delete p;
第二個是 delete[] p;