標籤:
new是用來動態申請記憶體空間的C++中的一個關鍵字。delete是用來刪除new所申請空間對象的。
想深入理解new請看:http://blog.csdn.net/songthin/article/details/1703966
delete p和delete [] p的區別:
1、int* p = new int(20);
delete p;
2、int*p = new int[10]();//數組帶初始化
delete [] p;
從上面兩個小例子,可以看出delete p 用來刪除單個元素,而delete [] p用來刪除數組元素。注意:當刪除數組元素時如果使用delete [] p 編譯也會是正確的,但意思就不同了。
關於delete後的野指標:
如上1,2所示,當刪除指標後,該指標變成懸垂指標(dangling pointer).懸垂指標指向曾經存放對象的記憶體,但該對象已經不存在了。 懸垂指標往往導致程式錯我,而且一般很難檢測出來。所以一旦刪除了對象就立即將指標設定為0,例如 delete p; p = NULL;
下面是一個關於懸垂指標的列子:引用原文http://blog.sina.com.cn/s/blog_6405313801013jvg.html
- #include <iostream>
- using namespace std;
- int main()
- {
- int *p = new int;
- *p = 3;
- cout<<"將3賦給p的地址後,指標p讀取的值:"<<*p<<endl;
- delete p;
- cout<<"刪除空間後,指標p讀取的值:"<<*p<<endl;
- long *p1 = new long;
- *p1 = 100;
- cout<<"p1的值:"<<*p1<<endl;
- cout<<"p的值:"<<*p<<endl;
- cout<<"建立新空間後,指標p中儲存的地址:"<<p<<endl;
- cout<<"指向新空間的指標p1儲存的地址:"<<p1<<endl;
- *p = 23;
- cout<<"將23賦給p的地址後,指標p讀取的值;"<<*p<<endl;
- cout<<"將23賦給p的地址後,指標p1讀取的值:"<<*p1<<endl;
- delete p1;
- return 0;
- }
運行結果:
以上代碼可以看出,刪除後的指標p和建立的指標p1指向的是同一塊記憶體,出現這種狀況的原因其實是由於編譯器。編譯器預設將釋放掉的記憶體空間回收然後分配給新開闢的空間。
歡迎賜教!
c++中的new 和delete