C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。
关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
对于 (1),下面提供的程序1 已经证明了 delete[] 和 delete 是等同的。但是对于 (2),情况就发生了变化。请看下面的程序2 。
#include <iostream>;
#include "xercesc/dom/DOM.hpp"
int main(){
char* pc = 0;
char* pc2;
int i = 21;
pc = new char;
std::cout<<(long)pc<<std::endl;
delete pc;
std::cout<<(long)pc<<std::endl;
pc2 = new char;
std::cout<<(long)pc2<<std::endl;
return 0;
}
输出:
[root@ts xml]# ./a.out
134519536
134519536
134519536
地址没有变化,用delete[], 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 << hex << p1 << endl;
// delete[] p1;
delete p1;
T* p2 = new T[NUM];
cout << p2 << endl;
delete[] p2;
}