- new/delete是C++关键字, malloc/free是库函数
- new以具体的类型为单位进行内存分配, malloc需要显式的指出所需内存的字节数
- 返回类型,new操作符成功时,返回对象类型的指针,无需进行类型转换; malloc操作成功时,返回void* 需要进行强制类型转换
- 分配失败。 new分配失败会抛出bac_alloc异常, malloc分配失败时返回null
- 构造析构函数。 new能出发构造函数,delete触发析构函数,先销毁对象再释放内存空间; malloc仅分配需要的内存空间, free仅归还分配的内存空间, 无法完成类对象的构造和析构工作
- 允许重载new/delete操作符, malloc不允许重载
- new操作符从自由存储区为对象分配内存空间,malloc从堆上动态分配内存。自由存储区时c++ 基于new的一个抽象概念。通过new进行内存申请,该内存即为自由存储区。 堆是由操作系统维护的一块特殊内存。自由存储区不等于堆,因为自由存储区可以不位于堆中
- 混用会怎么样?
- new申请,free释放: 内存泄漏。 因为free不会触发析构函数,不会释放构造函数申请的空间,导致内存泄漏
- malloc申请,delete释放: 摧毁不存在的对象。 malloc并没用调用构造函数创建对象。
- 如果使用中发现内存不够时候,malloc可以通过realloc 重新扩展内存, new不支持重新扩展内存
New和malloc区别
于 2024-07-15 10:38:24 首次发布