算法集市文章学习:
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对象中的剩余一个未被销毁,造成内存泄露。