对于简单的数据类型而言delete与delete[]是等价的,例如:
int* pInt = new int[20];
if (pInt)
{
delete [] pInt; // 等价于delete pInt
pInt = NULL;
}
但是如果是一个动态分配数据类型则不同,delete[]在释放数组空间之前对数组的每一个对象调用析构函数,而delete则仅仅释放指针所指的空间。在控制台运行以下程序,比较结果。例如:
// --------------------------------------
// main.cpp
// --------------------------------------
#include <iostream>
class CStudent
{
public:
CStudent()
{
m_pszName = new char[256];
}
~CStudent()
{
delete m_pszName;
}
private:
char* m_pszName;
int m_nAge;
};
void main()
{
CStudent* pStudent = new CStudent[10];
if (pStudent)
{
delete [] pStudent; // 如果使用delete会造成意想不到的结果,内存存在泄露
pStudent = NULL;
}
system("pause");
}