指針真正的用武之處在于,在運行階段分配未命名的內存來儲存值,格式:
typeName * pointer_name = new typeName;
如:int * pn = new int;
new分配的內存塊通常與常規變量聲明分配的內存塊不同。變量存儲在棧(stack)中,new從被稱為堆(heap)或自由存儲區的內存區域分配內存。
使用完內存后,需要將其歸還給內存池:delete pn;
記住一定要配對地使用new和delete,否則將造成內存泄漏。
不要使用delete釋放不是new分配的內存,也不要嘗試釋放已經釋放的內存塊,C++標準指出,這樣的結果時不確定的。即不要delete兩次。不過,對空指針使用delete是安全的。
一般來說,不要創建兩個指向同一個內存塊的指針,因為這將增加錯誤地刪除同一個內存塊兩次的可能性。
使用new創建動態數組:
int * psome = new int [10]; //并返回第一個元素的地址
delete [] psome;
方括號告訴程序,應該釋放整個數組,而不僅僅是指針指向的元素。如果使用new時不帶方括號,則delete也不應用方括號;如果使用new時帶方括號,則delete時要帶方括號。
注意psome + 1算術代表一個單元,增加量等于它指向的類型的字節數。
string類內置new和delete。
新聞熱點
疑難解答