【C++学习】C++中的new VS C语言中的malloc
来源:互联网 发布:java swing 组件大小 编辑:程序博客网 时间:2024/06/06 01:50
【C++学习】C++中的new VS C语言中的malloc
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
前几天一个朋友去面试百度空间的一个职位,被问及这个问题,我听后说了几点,不过感觉还是不透彻,所以上网查阅了一些资料,自己又想了想,总结一下。
- 动作不同:
- 在C++中,new一个对象时,程序完成对象的空间的分配的同时,构造函数也被调用,类似,delete一个对象时,对象的空间被释放的同时析构函数也被调用。
- 在C中,malloc和free 则没有构造函数和析构函数被调用这个动作。当然,在没有特定的构造函数或析构函数时,C++也没有这个动作。
- 关于重载:
- 在C++中,对于任何非数组的空间分配,我们可以通过定义函数名相同但参数不同的构造函数完成对构造函数的重载,而对于数组的空间分配,就只能使用默认构造函数了,若你试图去开辟一个没有默认构造函数的数组,Compiler会出错。
- 在C中,自然是没有重载这个事情了。
- 返回值不同:
- 在C中,malloc返回一个void *指针,需要你强制指针类型转换
- 在C++中,你直接new一个就好。
- 注意,对于基本类型,这个差别是二者唯一的差别,当然不建议在C++中使用malloc+强制类型转换创建基本数据类型或者对象。
- 定义不同:
- new是操作符
- malloc是函数
- 异常处理方式不同:
- new抛出异常
- malloc返回NULL
- 分配空间单位不同:
- new分配单位为对象所占用空间的倍数。
- malloc为字节
使用提示:
1.delete使用不当会造成内存泄露,下边的这个例子就是只有第一个t被释放掉:
Test* t = new Test[3];
delete t;
而下列代码会导致堆崩溃或数据丢失。
Test* t = new Test; delete[] t; // <-- This is even worse
2.realloc只能用于malloc。C++中你只能重新开辟空间、复制、释放原来空间来完成相同的操作。
3.性能区别,根据http://code.dawnofthegeeks.com/2009/05/04/fyi-new-vs-malloc/ 其中提到malloc/free慢于new/delete,但是在后来笔者开发的一个程序中却出现了不同的场景。
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
0 0
- 【C++学习】C++中的new VS C语言中的malloc
- C++中的new VS C语言中的malloc
- c语言中的malloc
- C语言中的malloc/free与C++中的new/delete的区别
- c++中的new和c中的malloc区别
- C++中的new和c中的malloc区别
- 关于c语言中的malloc问题
- C / c++ 语言中的malloc函数
- 请问c语言中的malloc是什么意思啊?
- C语言中的malloc和free
- C++中new/delete和C语言中的malloc free对比
- c++ 中new和c中的malloc的区别
- C和C++中的new , malloc 的区别
- C/C++中的malloc、calloc与new的区别
- C和C++中的new , malloc 的区别
- (10.14)4学习C版数据结构中熟悉malloc函数与C++中的new函数
- 【C语言学习】C语言中的函数
- c++学习笔记(四):c++中new delete关键字 VS c语言中malloc free函数
- 第十一周【会声会影项目教程】
- UML建模之业务处理模型(Business Process Model,BPM)
- 深入理解Java:注解(Annotation)--注解处理器
- USACO--3.2Sweet Butter+推优化的Dijkstral算法
- 黑马程序员-C前言-学习笔记
- 【C++学习】C++中的new VS C语言中的malloc
- nginx tomcat 配置 多个 二级域名 多个项目
- 第11周项目类族的设计
- 2.2 立方数之和 UVa11137
- C/C++面试题集合(2)
- 第十一周课后实践:阅读程序
- 2283156.html
- 第3章:缓冲I/O
- 手机本身可用存储空间和sdcard可用的存储空间