1. 不论申请一块多大的内存,头尾都会有对应的大小标注。
2. 如果是普通变量类型,直接释放掉(还给操作系统)头尾标记的内存块大小即可。
3. 但是如果是类的话,还得看类中的数据类型
a. 如果只有普通类型,可能没有影响
b. 有指针等,像套接字,文件描述符,线程等
i. 最明显的就是端口号不被释放,一直被占用,无法通信或者上网
ii. 不能修改这个文件,甚至不能读这个文件,除非开机
iii. 不被释放,这它总在后台运行,浪费内存和CPU资源
4. 如果是类的话,系统正常调用析构函数,但是只有一次,Debug模式下,会弹出析构的类型不匹配,也就是对应类的个数和第一个类的地址不匹配。虽然编译器的纠错功能勉强能调用一次,但比起未释放的资源数量(9个),这还是差远了。
第一种情况
int *p = new int[10];
delete p; //方式1
delete [] p; //方式2
这种情况下释放效果相同
第二种情况
class A
{
public:
int m;
~A()
{}
};
A* ptr = new A[1024];
delete ptr; //delete[] ptr;
return 0;