C++中delete函數(shù)的具體使用
在C++中delete函數(shù)用于回收new分配的內(nèi)存空間。
C++告訴我們在回收用 new 分配的單個對象的內(nèi)存空間的時候用 delete,回收用 new[] 分配的一組對象的內(nèi)存空間的時候用 delete[]。
關于 new[] 和 delete[],其中又分為兩種情況:(1) 為基本數(shù)據(jù)類型分配和回收空間;(2) 為自定義類型分配和回收空間。
在針對簡單的基本數(shù)據(jù)類型,使用delete也可以回收 new[] 分配的一組對象的內(nèi)存空間,因為:基本的數(shù)據(jù)類型對象沒有析構函數(shù),并且new 在分配內(nèi)存時會記錄分配的空間大小,則delete時能正確釋放內(nèi)存,無需調(diào)用析構函數(shù)釋放其余指針。因此兩種方式均可。
但是在對于自定義類型的時候,使用new[] 分配的一組對象的內(nèi)存空間最好還是要用delete[]回收。
例:
#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 << p1 << endl; //輸出P1的地址 // delete[] p1; delete p1; T* p2 = new T[NUM]; cout << p2 << endl; //輸出P2的地址 delete[] p2; return 0; }
結果:
可以看到在使用delete回收p1時,析構函數(shù)只調(diào)用了一次,也就是p1[0]的析構函數(shù),使用delete[]回收p2時,析構函數(shù)全部調(diào)用了。
所以如果在分配時使用new[],回收時最好用delete[]。
到此這篇關于C++中delete函數(shù)的具體使用的文章就介紹到這了,更多相關C++ delete函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!