1.new、delete、malloc、free关系
->delete会调用对象的析构函数,free只会释放内存
->malloc和new都可用于申请动态内存和释放内存
->new是为了c++能够完成动态内存和初始化工作的运算符,以及能完成清理与释放内存工作的运算符delete.
->由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内。
2.delete与delete[]区别
->delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数.
->对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说,用new分配的内存用delete删除;用new[]分配的内存用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。
3.new与malloc的区别
特征 | new | malloc |
分配内存的位置 | 自由存储区 | 堆 |
内存分配失败返回 | 完整类型指针 | void* |
分配内存的大小 | 由编译器根据类型计算得出 | 必须显示指定字节数 |
处理数组 | 有处理数组的new版本new[] | 需要用户计算数组的大小后进行内存分配 |
构造函数与析构函数 | 调用 | 不调用 |
分配内存时内存不足 | 客户能够指定处理函数或重新制定分配器 | 无法通过用户代码进行处理 |