开始学c++ 遇到一个问题 delete 和 delete[] 的区别? 在这里备个份,方便复习
c++中回收时: 如果是 new 分配的单个对象的内存空间时,我们回收内存空间时采用 delet
如果是new[] 分配的一组对象的内存空间时,我们回收内存空间时采用 delete[]
class Car{
public:
//构造函数
Car(){cout << "constructor" << endl;}
//析构函数
~Car(){cout << "destructor" << endl;}
};
int main() {
const int count = 3;
Car * car1 = new Car[count]();
cout << hex << car1 << endl;
// delete [] car1;//正确的写法
delete car1;//这样会崩溃
cout << "------华丽丽的分割线" << endl;
Car * car2 = new Car[count]();
cout << car2 << endl;
delete [] car2;
return 0;
}
运行结果为了让你们熟悉这个过程,我就不写在这里了
从运行结果我们可以总结: delete car 在回收内存空间的过程中,只有 car[0]调用了对象的析构函数,其他对象 car[1],car[2]没有调用对象的析构函数,说明 delete car 只会回收一个对象,这就是原因所在,所以我们应该使用 delete [] 即回收所有的内存空间.
基本类型的对象没有析构函数,所以对于基本类型的对象或数组用 delete 和 delete [] 应该都是可以的,对于对象数组,使用 delete [],单个对象可以使用 delete
使用原则:delete [] 跟随着 new [] 走.
补充: ~运算符 1.用于标识析构函数 ~Car(){} 2.用于表示按位取反即: ~010 = 101 ~0 = 1;