當需要內存時,可以使用new來請求,這只是C++內存管理數據包中有魅力的一個方面。另一個方面是delete運算符,它使得在使用完內存后,能夠將其歸還給內存池。這是通向最有效的使用內存的關鍵一步。歸還或釋放(free)的內存可供程序的其他部分使用。使用delete時,后面要加上指向內存塊的指針(這些內存塊最初是new分配的):
int * ps = new int; // allocate memory with new
. . . // use the memory
delete ps; // free menory with delete when done
這將釋放ps指向的內存,但不會刪除指針ps本身。例如,可以將ps重新指向另一個新分配的內存塊。一定要配對地使用new和delete;否則將發生內存泄漏(menory leak),也就是說,被分配的內存再也無法使用了。如果內存泄漏嚴重,則程序將由於不斷尋找更多的內存而終止。
不要嘗試釋放已經釋放的內存塊,C++標准指出,這樣做的結果僵屍不確定的,這意味着什么情況都有可能發生。另外,不能使用delete來釋放聲明變量所獲得的內存:
int * ps = new int;
delete ps;
delete ps;
int jugs = 5;
int * pi = &jugs;
delete pi;
警告:只能用delete來釋放使用new分配的內存。然而,對空指針使用delete是安全的。
注意,使用delete的關鍵在於,將它用於new分配的內存。這並不意味着要使用用於new的指針,而是用於new的地址:
int * ps = new int;
int * pg = ps;
delete pg;
一般來說,不要創建兩個指向用一個內存塊的指針,因為這將增加錯誤的刪除同一個內存塊兩次的可能性。對於返回指針的函數,使用另一個指針確實有道理。
