delete與 delete []差別
delete隻會調用一次析構函數,而delete[]會調用每一個成員的析構函數。在MoreEffective C++中有更為詳細的解釋:“當delete[]操作符用于數組時,它為每個數組元素調用析構函數,然後調用operator delete來釋放記憶體。”delete與New配套,delete []與new []配套
MemTest *mTest1=newMemTest[10];
MemTest *mTest2=newMemTest;
int *pInt1=newint[10];
int *pInt2=newint;
delete[]pInt1; //-1-
delete[]pInt2; //-2-
delete[]mTest1;//-3-
delete[]mTest2;//-4-
在-4-處報錯。
這就說明:對于内建簡單資料類型,delete和delete[]功能是相同的。對于自定義的複雜資料類型,delete和delete[]不能互用。delete[]删除一個數組,delete删除一個指針簡單來說,用new配置設定的記憶體用delete删除;用new[]配置設定的記憶體用delete[]删除;delete[]會調用數組元素的析構函數。内部資料類型沒有析構函數,是以問題不大。如果你在用delete時沒用括号,delete就會認為指向的是單個對象,否則,它就會認為指向的是一個數組。