作者: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,但是在后来笔者开发的一个程序中却出现了不同的场景。

转:http://www.cnblogs.com/gnuhpc/archive/2012/12/10/2811943.html

转载于:https://www.cnblogs.com/eleclsc/p/5812079.html

【转】 C++中的new VS C语言中的malloc相关推荐

  1. c语言中变量加1,c语言中,指针加1的情况.指针变量详细介绍

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...

  2. C语言中的malloc与free函数

    C语言中的malloc与free函数 malloc函数的作用是在堆中开辟一块指定大小的空间.如果开辟成功,返回空间首个字节地址,失败则返回NULL. free函数能够释放在堆中开辟的内存空间,传入一个 ...

  3. C语言switch中break的作用,C语言中switch...case语句中break的重要性

    在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...

  4. c语言中的所有关键字,C语言中的32个关键字

    C语言中的32个关键字 数据类型关键字(12个) (1)     char:声明字符型变量或函数 (2)     double:声明双精度变量或函数 (3)     enum:声明美剧类型 (4)   ...

  5. c语言中区别一般变量,C语言中,为了区别一般的变量,符号常量必须用

    C语言中,为了区别一般的变量,符号常量必须用大写字母表示.(?) 答:错 ,维也纳古典乐派代表人物之一,欧洲古典主义时期作曲家.因其对古典音乐的重大贡献,对奏鸣曲式和交响曲套曲结构的发展和创新,而被后 ...

  6. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

  7. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

  8. C语言中字母a等于,C语言中’a’和"a"有什么区别?,c语言中“!a"是什么意思啊...

    导航:网站首页 > C语言中'a'和"a"有什么区别?,c语言中"!a"是什么意思啊 C语言中'a'和"a"有什么区别?,c语言中"!a"是什么意思啊 匿名网友: 1.本质区 ...

  9. c语言中字符 a b =,C语言中(ab)?a:b和(ab)?b:a有什么区别,C语言中,a++ +b和a+ ++b有什么不同...

    导航:网站首页 > C语言中(a>b)?a:b和(a C语言中(a>b)?a:b和(a 匿名网友: "?"在C语言中表示疑问.假如.如果. ":&quo ...

最新文章

  1. log4j用法http://zengjinliang.javaeye.com/blog/171550
  2. 澄清大数据存储——系统集成商篇
  3. thinkphp如何一次性的上传多个文件,在文件域中可以多选?
  4. 实用插件_这些实用的PR插件你知道吗?
  5. awk 实例练习(一)
  6. springboot使用定时器及发送邮件
  7. Linux 调优方案, 修改最大连接数(ulimit命令)
  8. ios8 定位问题解决思路
  9. AjaxControlToolkit的使用
  10. AttributeError: 'module' object has no attribute 'version'
  11. Excel VBA利用事件对图表自动更新
  12. 实战PHP数据结构基础之队列
  13. linux gdb基本调试及其多线程调试
  14. 请教高手,如何取得Target属性
  15. ASP.Net网站管理工具配置
  16. 指定条件查找计算机,Excel函数教程: 查找符合指定条件的数据-excel技巧-电脑技巧收藏家...
  17. 生成sis文件的诀窍
  18. matlab根据火焰RGB值求温度程序,基于MATLAB的炉膛火焰图像温度测量
  19. IOS 调用第三方地图APP导航
  20. 视频监控系统由哪几部分组成?(视频监控入门基础-附思维导图)

热门文章

  1. 强化学习《基于策略价值 - Asynchronous Adventage Actor-Critic》
  2. jdbc关于操作Oracle时间数据解析
  3. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作
  4. python123第一周测试作业指导书_风速仪作业指导书.doc
  5. vba 检查一个文件夹中的文件在另一个文件夹中是否存在(不含扩展名)
  6. Ubuntu16.04--code::blocks16.01 的代码拷贝到Windows 8.1--visual studio 2013 注意事项
  7. Java7并发编程指南——第三章:线程同步辅助类
  8. wait_event_interruptible 在驱动中的应用
  9. python抓取贴吧_python抓取百度贴吧-校花吧,网页图片
  10. hp服务器修改bios设置,HP服务器BIOS详解.pdf