天天看點

delete與 delete []差別delete與 delete []差別

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就會認為指向的是單個對象,否則,它就會認為指向的是一個數組。