C++(1) 指针 new 和delete
1.概念
new?? //typeName * pointer_name = new typeName;
delete //delete pointer_name;
?
注意:
????????(1)new之后要判斷,指針是否為NULL,內存被耗盡時,防止程序超界、
??????? (2)如果用變量分配的內存,則不能使用delete
??????????? int a = 5;
??????????? int * p = &a;
??????????? delete p;?? //ERROR!!
??????? (3)盡量不要創建兩個指針指向同一內存塊,可能對此內存塊刪除兩次。
?????????? 但對于返回指針的函數,使用是有道理的。(道理在哪??)
?
2.動態數組
?????(1) 靜態聯編:通過聲明來創建數組--編譯時為其分配內存空間,編寫程序時,確定數組長度;
??? ?????? 動態聯編:通過new分配空間--運行時確定數組的長度
???? (2)? int * pt = new int[10];
?
?????????? pt[0] = 1;? //可以使用數組的方式賦值
?????????? pt[1] = 2;
?????????? pt[3] = 3;
???????????pt = pt +1;?? //此時pt[0] = 2;?? pt[1] = 3;
?????????????????????????????? //相鄰的int地址相差2個或者4個字節,但將pt +1 后指向的是下一個元素的地址
?????????? pt = pt -1;?? //指針變量指向原來的值,給后面的delete [] 提供正確的地址
?????????? delete [] pt;? //delete 注意:a.與new或new [] 配對使用
?????????????????????????????????????????????????????????? b.不能使用delete釋放同一塊內存兩次,造成不確定
?????????????????????????????????????????????????????????? c.對空指針使用delete安全,但作用是??(不理解)
???????????????????????????????????????????????????????????d.使用new[]為一個實體分配內存,則應使用delete(沒有括號來釋放)。
??????????????????????????????????????????????????????????? (書上看到的,不理解實體分配是什么情況?為什么沒有括號?)
總結
以上是生活随笔為你收集整理的C++(1) 指针 new 和delete的全部內容,希望文章能夠幫你解決所遇到的問題。