C++中 delete对象和对象数组时的区别
首先**C++**在回收用new分配出来的单个对象的内存空间时,直接用delete;回收用new分配出来的对象数组内存空间时,需要使用delete[]。
- 调用new所包含的动作:从系统申请一块内存,并调用对象的构造函数;
- 调用delete所包含的动作:先调用对象的析构函数,再释放内存归还系统;
- 调用new[n]所包含的动作:从系统申请可容纳n个对象的内存空间,并调用n次构造函数来初始化这n个对象;
- 调用delete[]所包含的动作:先调用n次对象的析构函数,然后再释放内存;
示例代码如下:
#include<iostream>
using namespace std;
class Student {
public:
Student(){
cout<<"Constructor"<<endl;
}
~Student(){
cout<<"~Constructor"<<endl;
}
}
int main() {
Student* stu=new Student();
delete stu;
stu=nullptr;
cout<<"--------"<<endl;
Student* stuArr=new Student[2];
delete[] stuArr;//不要漏了[]
stuArr=nullptr;
return 0;
}
运行程序,输出:
Constructor
~Constructor
--------
Constructor
Constructor
~Constructor
~Constructor
注意:若将delete[] studArr改为delete stuArr,则会导致stuArr指向的2个Student对象中的剩余一个未被销毁,造成内存泄露。