new/delete 与 malloc/free

1、malloc与free是c++/c语言的标准函数,new/delete是C++的运算符。

2、new返回指定类型的指针,并且可以自动计算出所需要的大小。

malloc必须用户指定所申请内存的大小,并且默然返回类型为void*,必须强行转换为实际类型的指针。

int *p = new int; //返回类型为int*类型,大小为sizeof(int);

int *pa = new int[50];//返回类型为int *,大小为sizeof(int) * 50;

 

3、 分配内存失败时:

       new 的处理方式:C++新版标准会抛出bad_alloc异常来报告分配失败;旧版标准返回空指针,而不会抛出异常。

 

参考链接:http://www.cnblogs.com/QG-whz/p/5140930.html

 

特征new/deletemalloc/free
分配内存的位置 自由存储区
内存分配成功返回值 完整类型指针 void*
内存分配失败返回值 默认抛出异常 返回NULL
分配内存的大小 由编译器根据类型计算得出 必须显式指定字节数
处理数组 有处理数组的new版本new[] 需要用户计算数组的大小后进行内存分配
已分配内存的扩充 无法直观地处理 使用realloc简单完成
是否相互调用 可以,看具体的operator new/delete实现 不可调用new
分配内存时内存不足 客户能够指定处理函数或重新制定分配器 无法通过用户代码进行处理
函数重载 允许 不允许
构造函数与析构函数 调用 不调用
posted @ 2020-12-13 16:28  zeroPatrick  阅读(70)  评论(0编辑  收藏  举报