malloc和new有以下不同:

  • new、delete是操作符,可以重载,只能在c++中使用。
  • malloc、free是函数,可以覆盖,c、c++中都可以使用。
  • new可以调用对象的构造函数,对应的delete调用相应的析构函数。
  • malloc仅仅负责分配内存,free仅仅回收内存,并不执行构造和析构函数。
  • new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。

注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用。因为两者实现的机理不同。

有了malloc/free为什么还要new/delete?
malloc/free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存
对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构 函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 对于内部数据类型的“对象”没有构造与析构过程,对它们而言,malloc/free和new/delete是等价的。为什么C++不把malloc /free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

malloc和new有什么区别相关推荐

  1. calloc、malloc、realloc函数的区别及用法

    calloc.malloc.realloc函数的区别及用法! 三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些差异. (1)malloc函数.其原型void *malloc(unsig ...

  2. VC++中GlobalAlloc()、malloc()和new()函数之间区别

    VC++中GlobalAlloc().malloc()和new()函数都可以用来实现内存的动态分配,那么它们之间有什么区别呢? 三者的区别主要有以下几点: 1.GlobalAlloc()函数在程序的堆 ...

  3. 一文解决new/delete与malloc/free相关问题:区别?注意事项?使用方式?

    目录 一.内存分配模型 1.1 先看内存的分布状况 1.2 动态内存分配 1.3 C语言中分配内存的方式 1.4 C++中动态分配内存的方式 二.new和malloc的区别 2.1 属性 2.2 参数 ...

  4. malloc()和calloc()有啥区别

    malloc和calloc函数在参数百个数.初始化内存空间.函数返回值上有区别: 1.参数个数上的区别: malloc函数:malloc(size_t size)函数有一个参数,即要度分配的内存空间的 ...

  5. malloc和calloc之间的区别?

    做的有什么区别: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); 要么: ptr = (char **) calloc (MAXELEMS, s ...

  6. alloc()、malloc()、calloc()、realloc()区别及用法

    C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别.  ...

  7. malloc,vmalloc,kmalloc区别

    1.kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 2.kmalloc保证分配的内存在物理上是连续的,内存只有在要被DMA访问的时候才需要物理上连续,malloc和 ...

  8. new/delete和malloc/free的区别

    还是先说说区别吧:     1. new/delete是C++里才有的,而new/delete与malloc/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在 ...

  9. calloc和malloc_malloc()vs calloc()– C中的malloc()和calloc()之间的区别

    calloc和malloc Here in this tutorial you will learn about difference between malloc() and calloc() in ...

最新文章

  1. 提高C++性能的编程技术笔记:多线程内存池+测试代码
  2. 回溯算法详解之全排列、N皇后问题
  3. 用Docker构建LNMP环境(上)
  4. RabbitMQ一个简单可靠的方案(.Net Core实现)
  5. CoreText使用介绍
  6. 创建自定义Tabs组件-01
  7. Python遇到的问题(二)
  8. Node.js新手教程——怎样实现文件上传功能
  9. 【九度OJ1348】|【剑指offer36】数组中的逆序对
  10. 路由器修改hosts实现域名劫持
  11. 第【一】部分Netzob项目工具的安装配置
  12. win10如何设置锁屏后不熄屏
  13. 卸载Linux原生java_卸载linux自带openjdk并安装sun jdk
  14. 苹果mac笔记本部分按键失灵,为什么要5连按⌥ option键
  15. C++ 拉格朗日插值法优化 DP
  16. Hadoop系列-Hadoop常用命令(五)
  17. 中兴校招c语言在线笔试题,中兴2017校招软件在线笔试题
  18. 今天给大家推荐一个可视化库:cutecharts,我把她叫做pyecharts的妹妹
  19. 关于2000终端的个人看法和心得(转)
  20. J-Link-OB-STM32F072

热门文章

  1. RabbitMQ 的安装----windows环境
  2. make,makefile,cmake“暴力编译法”的个人经验或理解。
  3. setTimeout 的定时器的妙用
  4. unity3d 多人寻路堵塞堆叠问题
  5. OpenCV 之 直方图处理
  6. static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
  7. windows网络编程第二版 第三章 Internet Protocol 读书笔记
  8. Kotlin学习笔记(3)- 语法
  9. 用黄金圈思维来思考测试
  10. 使用js如何获取treeview控件的当前选中的节点