程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中delete和delete[]的差別

C++中delete和delete[]的差別

編輯:關於C++

C++中delete和delete[]的差別。本站提示廣大學習愛好者:(C++中delete和delete[]的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中delete和delete[]的差別正文


一向對C++中的delete和delete[]的差別不甚懂得,明天碰到了,上彀查了一下,得出了卻論。做個備份,以避免喪失。

    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,則只會挪用第一個對象的析構函數,前面對象的析構函數沒有被挪用,那末其空間能否釋放了呢??

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved