C++中new/delete和malloc/free的区别
2017-07-10 21:16
281 查看
相同点:都是运行时申请动态内存和释放内存
不同点:1、返回类型安全性:new返回对象类型的指针,类型严格与对象匹配,无需进行类型转换;malloc返回void*,需要强制转换为需要的类型
2、内存分配失败的返回值:new动态内存分配失败时,会抛出bad_alloc异常,而malloc分配失败时会返回NULL
3、是否需要指定内存大小:new运算符无需指定,编译器自动计算大小;malloc需要人工指定需要分配的内存大小
4、是否调用构造/析构函数:new的执行过程:分配原始内存->构造函数->返回指针,而malloc不会调用构造函数
5、是否可以被重载:new/delete可以被重载,malloc/free不可以被重载
6、能否直观重新分配内存:使用malloc分配内存后,如果使用过程发现内存不够用,可以使用realloc重新分配内存,如果当前位置有可用的内存,直接扩充,如果当前位置没有可用内存或者可用内存不够,找另一块内存,复制数据,释放原内存;而new只能重新另找一块内存,复制数据,释放原内存。
7、new/free是运算符,而malloc/free是库函数。
另:对于基本类型的数组,delete [ ] a和delete a是等价的,但是对于自定义数据类型来说,不等价。比如:int *a=new int[5],则delete a<->delete [ ] a
不同点:1、返回类型安全性:new返回对象类型的指针,类型严格与对象匹配,无需进行类型转换;malloc返回void*,需要强制转换为需要的类型
2、内存分配失败的返回值:new动态内存分配失败时,会抛出bad_alloc异常,而malloc分配失败时会返回NULL
3、是否需要指定内存大小:new运算符无需指定,编译器自动计算大小;malloc需要人工指定需要分配的内存大小
4、是否调用构造/析构函数:new的执行过程:分配原始内存->构造函数->返回指针,而malloc不会调用构造函数
5、是否可以被重载:new/delete可以被重载,malloc/free不可以被重载
6、能否直观重新分配内存:使用malloc分配内存后,如果使用过程发现内存不够用,可以使用realloc重新分配内存,如果当前位置有可用的内存,直接扩充,如果当前位置没有可用内存或者可用内存不够,找另一块内存,复制数据,释放原内存;而new只能重新另找一块内存,复制数据,释放原内存。
7、new/free是运算符,而malloc/free是库函数。
另:对于基本类型的数组,delete [ ] a和delete a是等价的,但是对于自定义数据类型来说,不等价。比如:int *a=new int[5],则delete a<->delete [ ] a
相关文章推荐
- c/c++中malloc/free和new/delete的区别
- c++中的malloc/free 和 new/delete这两对的区别
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
- 深入理解C++动态内存管理:malloc/free和new/delete的区别和联系
- C++中malloc/free和new/delete的区别---补充(15)《Effective C++》
- C语言中的malloc/free与C++中的new/delete的区别
- C++中,malloc/free和new/delete的区别
- C/C++语言中malloc/free和new/delete的区别
- C++中的new/delete和malloc/free的区别
- c++ malloc/free、new/delete 内存申请函数比较
- new/delete与malloc/free的区别
- malloc/free 与new/delete 的区别
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别
- new/delete和malloc/free的区别
- malloc/free 和 new/delete 的区别
- 高质量c++(有了malloc/free 为什么还要new/delete )
- malloc/free和new/delete的区别及使用要点(转)
- malloc/free和new/delete的区别