-- TOC --
通过new申请的内存,用delete释放。通过new[]申请的内存,用delete[]释放。不能用错了。
传统的C语言申请内存,都是一整块,如果用于数组,那么通过指针+1的方式一块块访问,释放时就是这一整块一次性释放。而C++由于引入了对象的destructor,当使用new[]申请对象数组的时候,一定要用delete[]释放,此时编译器会依次一个个调用数组中每个对象的destructor,最后再释放对象数组占用的内存。
但测试发现,对于primitive data types的内存,delete和delete[]没有区别,不过,最好别作...
下面是一段测试代码:
#include <iostream>
using namespace std;
struct xyz{
xyz(void){cout<<"hi..\n";}
~xyz(void){cout<<"die..\n";}
};
struct rock{
int a;
int b;
};
int main(void) {
xyz *a{new xyz[4]{}};
delete[] a;
xyz *b{new xyz{}};
delete b;
// POD or primitive types are OK, but don't do it if possible!
rock *c{new rock[4]{}};
delete c;
return 0;
}
修改delete即可自行测试观察。
本文链接:https://cs.pynote.net/sf/c/cpp/202209024/
-- EOF --
-- MORE --