欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中delete和delete[]的區(qū)別

 更新時間:2016年03月21日 10:36:06   投稿:hebedich  
這篇文章主要介紹了C++中delete和delete[]的區(qū)別的相關資料,需要的朋友可以參考下

一直對C++中的delete和delete[]的區(qū)別不甚了解,今天遇到了,上網查了一下,得出了結論。做個備份,以免丟失。

    C++告訴我們在回收用 new 分配的單個對象的內存空間的時候用 delete,回收用 new[] 分配的一組對象的內存空間的時候用 delete[]。  關于 new[] 和 delete[],其中又分為兩種情況:(1) 為基本數據類型分配和回收空間;(2) 為自定義類型分配和回收空間。

請看下面的程序。

#include <iostream>;
using namespace std;
 
class T {
public:
 T() { cout << "constructor" << endl; }
 ~T() { cout << "destructor" << endl; }
};
 
int main()
{
 const int NUM = 3;
 
 T* p1 = new T[NUM];
 cout << hex << p1 << endl;
 // delete[] p1;
 delete p1;
 
 T* p2 = new T[NUM];
 cout << p2 << endl;
 delete[] p2;
}
 

大家可以自己運行這個程序,看一看 delete p1 和 delete[] p1 的不同結果,我就不在這里貼運行結果了。

    從運行結果中我們可以看出,delete p1 在回收空間的過程中,只有 p1[0] 這個對象調用了析構函數,其它對象如 p1[1]、p1[2] 等都沒有調用自身的析構函數,這就是問題的癥結所在。如果用 delete[],則在回收空間之前所有對象都會首先調用自己的析構函數。      基本類型的對象沒有析構函數,所以回收基本類型組成的數組空間用 delete 和 delete[] 都是應該可以的;但是對于類對象數組,只能用 delete[]。對于 new 的單個對象,只能用 delete 不能用 delete[] 回收空間。      所以一個簡單的使用原則就是:new 和 delete、new[] 和 delete[] 對應使用。

  我的理解,當用delete來釋放用new int[]申請的內存空間時,由于其為基本數據類型沒有析構函數,所以使用delete與delete []相同,兩者都會釋放申請的內存空間,若是自定義的數據類型,有析構函數時,用new []申請的空間,必須要用delete []來釋放,因為要delete []時會逐一調用對象數組的析構函數,然后釋放空間,如果用delete,則只會調用第一個對象的析構函數,后面對象的析構函數沒有被調用,那么其空間是否釋放了呢??

相關文章

  • C++調用EasyX庫實現嫦娥奔月小游戲

    C++調用EasyX庫實現嫦娥奔月小游戲

    這篇文章主要為大家詳細介紹了C++如何調用EasyX庫編寫一個簡單的嫦娥奔月小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2023-09-09
  • C++指針數組、數組指針、數組名及二維數組技巧匯總

    C++指針數組、數組指針、數組名及二維數組技巧匯總

    這篇文章主要介紹了C++指針數組、數組指針、數組名及二維數組技巧匯總,對于深入理解C++數組與指針來說非常重要,需要的朋友可以參考下
    2014-08-08
  • C語言楊氏矩陣查找算法實例講解

    C語言楊氏矩陣查找算法實例講解

    楊氏矩陣是一個數字矩陣,矩陣的每一行從左到右一次遞增,矩陣從上到下遞增,在這樣的矩陣中查找一個數字是否存在。時間復雜度小于O(N),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-09-09
  • 嵌入式QT移植的實現

    嵌入式QT移植的實現

    本文主要介紹了嵌入式QT移植的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C++中調用復制(拷貝)函數的三種情況總結

    C++中調用復制(拷貝)函數的三種情況總結

    這篇文章主要介紹了C++中調用復制(拷貝)函數的三種情況總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 通俗易懂的C++前綴和與差分算法圖文示例詳解

    通俗易懂的C++前綴和與差分算法圖文示例詳解

    這篇文章主要為大家非常通俗易懂的講解了C++前綴和與差分算法的圖文分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • C++通過CryptoPP計算Hash值的過程詳解

    C++通過CryptoPP計算Hash值的過程詳解

    Crypto++ (CryptoPP) 是一個用于密碼學和加密的C++庫,它是一個開源項目,提供了大量的密碼學算法和功能,本文小編給大家介紹了C++通過CryptoPP計算Hash值的過程,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • C++求Fib數列

    C++求Fib數列

    本文給大家匯總介紹了幾種C++求Fib數列的方法,有需要的小伙伴們可以來參考下
    2016-02-02
  • VS編譯出現MSB3073命令的解決方案

    VS編譯出現MSB3073命令的解決方案

    =error MSB3073是Visual Studio編譯器報出的錯誤,本文主要介紹了VS編譯出現MSB3073命令的解決方案,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • C語言數據結構之線索二叉樹及其遍歷

    C語言數據結構之線索二叉樹及其遍歷

    這篇文章主要介紹了C語言數據結構之線索二叉樹及其遍歷的相關資料,為了加快查找節(jié)點的前驅和后繼。對二叉樹的線索化就是對二叉樹進行一次遍歷,在遍歷的過程中檢測節(jié)點的左右指針是否為空,如果是空,則將他們改為指向前驅和后繼節(jié)點的線索,需要的朋友可以參考下
    2017-08-08

最新評論