delete 和delete []的区别

    今天看到动态内存分配时对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]; delete []p1; cout<<"-----------------"<<endl; T* p2 = new T[NUM]; delete []p2; //把delete[]p2改为delete p2再运行次。 return 0; }

第一次运行,delete语句执行后,2个对象数组都分别调用了3次析构函数。

把delete []p2改为delete p2后,只调用一次析构函数,在vc6.0下编译运行后,程序还会产生一个错误警告。

 

总结如下:new和delete,new [] 和delete []应该成对使用。

你可能感兴趣的:(delete,Constructor,destructor)