C++使用delete釋放內存


  當需要內存時,可以使用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;

  一般來說,不要創建兩個指向用一個內存塊的指針,因為這將增加錯誤的刪除同一個內存塊兩次的可能性。對於返回指針的函數,使用另一個指針確實有道理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM