new和malloc的区别
malloc 和 free 是函数,而new 和 delete 是运算符
new在申请内存也会调用对象的构造函数 malloc 只会申请内存
delete 在释放内存之前 会调用对象的析构函数 free 只会释放内存。
什么是资源释放
释放一个内存地址并不是把这块地址的值置为0 而是将这块地址设为未使用
那我们delete和free释放内存做了什么
void main()
{
int* a = new int;
*a = 2;
int* b = new int;
b = a;
cout << "未delete前:a:"<<a << endl;
cout << "未delete前:*a:" << *a << endl;
cout << "未delete前:b:" << b << endl;
cout << "未delete前:*b:" << *b << endl;
delete(a);
cout << "delete后:a:" << a << endl;//a变成了一个新的地址
cout << "delete后:b:" << b << endl;//此时b还是释放前的地址
cout << "delete后:*b:" << *b << endl;//发现此时释放前地址存储的值变成了垃圾值
cout << "a崩溃了!!" << endl;
cout << "delete后:*a:" << *a << endl;//这里没办法执行了
}
那么释放内存做了什么?
1.将释放的那个内存对象的地址改变成了别的地址
2.无法再访问被释放的内存对象
3.被释放的地址存储的值变成了垃圾值
什么是内存泄漏
指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果