C++中new/delete和malloc/free的区别
来源:互联网 发布:淘宝店铺导航css代码 编辑:程序博客网 时间:2024/06/05 11:37
相同点:都是运行时申请动态内存和释放内存
不同点: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
阅读全文
0 0
- c/c++中malloc/free和new/delete的区别
- C/C++ 中 new/delete 和 malloc/free 区别
- [C/C++] malloc/free和new/delete的区别
- malloc/free 和 new/delete的区别
- malloc/free和new/delete的区别
- malloc/free 和 new /delete 的区别
- malloc/free和new/delete的区别
- malloc/free和new/delete的区别
- malloc/free 和 new /delete 的区别
- new/delete和malloc/free的区别
- new/delete和malloc/free的区别
- malloc/free 和 new /delete 的区别
- new/delete和malloc/free的区别
- new/delete 和malloc/free 的区别
- new/delete和malloc/free的区别
- new/delete 和 malloc/free 的区别
- new delete和 free malloc 的区别
- malloc/free和new/delete的区别
- npm和yarn
- HBase(二)hbase shell常用语法
- 怪异盒模型和标准盒模型
- jdbc
- 面向对象编程之类的继承性
- C++中new/delete和malloc/free的区别
- jquery动画
- 卷积神经网络技术及发展
- HDU1384 Intervals 题解 【差分约束】
- AI==喜茶??
- How to convert docx/odt to pdf/html with Java?
- HTML中关于列表标签
- UNIX时间和夏令时计算
- Pyqt4 vnpy源码中关于GUI设计 1