对于简单的数据类型,delete与delete[]是没啥差别的,就是等价的
例如
int main() { int *pdata = new int[20]; delete pdata; //delete[] pdata; return 0; }
这两是等价的,没有什么区别,
但是如果是一个动态分配数据的数据类型,就不同了,delete[]在释放数组控件前,对数组中每一个对象调用析构函数,而delete择仅仅是释放指针所指的控件
例如
class Student { private: char* name; int age; public: Student() { name = new char[100]; }; ~Student() { delete name; }; }; int main() { Student* pData = new Student[20]; delete[] pData; return 0; }
在这里如果使用了delete,那就会有意想不到的后果了,至于什么后果,在我尝试编译的时候 ,触发了中断。
应该是内存访问有问题了。