c++中的new 和delete

來源:互聯網
上載者:User

標籤:

  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  

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int *p = new int;
  6. *p = 3;
  7. cout<<"將3賦給p的地址後,指標p讀取的值:"<<*p<<endl;
  8. delete p;
  9. cout<<"刪除空間後,指標p讀取的值:"<<*p<<endl;
  10. long *p1 = new long;
  11. *p1 = 100;
  12. cout<<"p1的值:"<<*p1<<endl;
  13. cout<<"p的值:"<<*p<<endl;
  14. cout<<"建立新空間後,指標p中儲存的地址:"<<p<<endl;
  15. cout<<"指向新空間的指標p1儲存的地址:"<<p1<<endl;
  16. *p = 23;
  17. cout<<"將23賦給p的地址後,指標p讀取的值;"<<*p<<endl;
  18. cout<<"將23賦給p的地址後,指標p1讀取的值:"<<*p1<<endl;
  19. delete p1;
  20. return 0;
  21. }  

運行結果:

 以上代碼可以看出,刪除後的指標p和建立的指標p1指向的是同一塊記憶體,出現這種狀況的原因其實是由於編譯器。編譯器預設將釋放掉的記憶體空間回收然後分配給新開闢的空間。

 歡迎賜教!

c++中的new 和delete

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.