C++在回收用 new 分配的单个对象的内存空间时,直接用 delete;回收用 new[] 分配的数组对象的内存空间时,需要用 delete[]。
- 调用 new 所包含的动作:从系统中申请一块内存,并调用对象的构造函数;
- 调用 delete 所包含的动作:先调用对象的析构函数,然后将内存归还系统;
- 调用 new[n] 所包含的动作:申请可容纳 n 个对象的空间,并调用 n 次构造函数来初始化这 n 个对象;
- 调用 delete[] 所包含的动作:先调用 n 次对象的析构函数,再将内存归还系统。
比如下面这段代码:
#include <iostream>
using namespace std;
class Student {
public:
Student() {
cout << "1. Constructor" << endl;
}
~Student() {
cout << "2. Destructor" << endl;
}
};
int main()
{
Student* stu = new Student();
delete stu;
stu = nullptr;
cout << "---" << endl;
Student* stuArr = new Student[2];
delete[] stuArr; // 不要漏了[]
stuArr = nullptr;
return 0;
}
运行结果为:
需要注意的是:若将 delete[] stuArr 改为 delete stuArr,则会导致 stuArr 指向的2个Student对象中的剩余1个未被销毁,造成内存泄漏。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。