1、malloc,free是C语言的函数,而new,delete是操作符,属于C++的语法,一定注意这两个不再是函数了,而是操作符。

2、malloc和new对于分配基础类型变量和数组变量,它们除了语法上有些区别,比如

demo

  1. ////分配基础类型
  2. int main()
  3. {
  4. //
  5. int *p = (int *)malloc(sizeof(int));
  6. *p = 10;
  7. //free(p);
  8. delete p;
  9.  
  10. int *p2 = new int; //分配基础类型
  11. *p2 = 20;
  12. free(p2);
  13. //
  14. int *p3 = new int(30);
  15. printf("*p3:%d \n", *p3);
  16. //delete p3;
  17. free(p3);
  18.  
  19. return 0;
  20. }
  1. //分配数组变量
  2. int main()
  3. {
  4. //c语言分配数组
  5. int *p = (int *)malloc(sizeof(int) * 10); //int array[10];
  6. p[0] = 1;
  7. //free(p);
  8. delete[] p;
  9.  
  10. //c++分配数组
  11. int *pArray = new int[10] ;
  12. pArray[1] = 2;
  13. //delete [] pArray; //数组不要把[] 忘记
  14. free(pArray);
  15.  
  16. char *pArray2 = new char[25] ; //char buf[25]
  17. delete [] pArray2;
  18.  
  19. return 0;
  20. }

3、除了语法的区别,他们实际的作用没有什么不同,而且用malloc分配的可以用delete释放,new分配的也可以用free释放。但是对于类对象的分配,它们的区别比较明显

demo

  1. class Test
  2. {
  3. public:
  4. Test(int _a)
  5. {
  6. a = _a;
  7. cout<<"构造函数执行" <<endl;
  8. }
  9.  
  10. ~Test()
  11. {
  12. cout<<"析构函数执行" <<endl;
  13. }
  14.  
  15. protected:
  16. private:
  17. int a;
  18. };
  19.  
  20. //分配对象 new delete
  21. //相同和不同,new能执行类型构造函数,delete操作符,能执行类的析构函数
  22.  
  23. int main()
  24. {
  25. //c
  26. Test *pT1 = (Test *)malloc(sizeof(Test));
  27. //free(pT1);
  28. delete pT1;
  29.  
  30. //c++
  31. Test *pT2 = new Test(10);
  32. //delete pT2;
  33. free(pT2);
  34. <span style="white-space:pre"> </span>return 0;
  35. }

用new和delete时,会分别调用类的构造函数和析构函数,而此时malloc和free就无力了。

深度剖析malloc、free和new、delete的更多相关文章

  1. 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析

    [渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...

  2. 读书笔记之:C语言深度剖析

    读书笔记之:C语言深度剖析 <C 语言深度解剖>这本书是一本“解开程序员面试笔试的秘密”的好书.作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中 ...

  3. libevent源码深度剖析六

    libevent源码深度剖析六 ——初见事件处理框架 张亮 前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析 lib ...

  4. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  5. Mysql binlog应用场景与原理深度剖析

    1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...

  6. http之抽丝剥茧,深度剖析http的那些事儿

    最近,小编一心扎跟学技术,毫不顾及头发的掉落速度,都快成地中海了,不过也无大碍,谁让咱是一个爱钻技术的男人呢.最近两周老是看到http,那么这个http,有哪些猫腻呢,很多同学都有这种理解,就是对于h ...

  7. Axios源码深度剖析

    Axios源码深度剖析 - XHR篇 axios 是一个基于 Promise 的http请求库,可以用在浏览器和node.js中,目前在github上有 42K 的star数 分析axios - 目录 ...

  8. 《AngularJS深度剖析与最佳实践》简介

    由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...

  9. ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

    从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...

随机推荐

  1. VGG网路结构

    VGG网络的基本结构 如图所示,从A到E网络的深度是逐渐增加的,在A中有11个权重层(8个卷积层,3个全连接层),在E中有19个权重层(16个卷积层,3个全连接层),卷积层的宽度是十分小的,开始时在第 ...

  2. java底层学习

    额,马上就要面试了,Java的底层肯定是需要了解的.网上找了找java的底层文章,做个记号.java底层主要是类的加载.连接和初始化. 本文主要分为四个方面: (1)java底层概述 (2)new和n ...

  3. 一口一口吃掉Hibernate(六)——多对多关联映射

    今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...

  4. Flume 读取RabbitMq消息队列消息,并将消息写入kafka

    首先是关于flume的基础介绍 组件名称 功能介绍 Agent代理 使用JVM 运行Flume.每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks. Client ...

  5. windows下 gvim8.0 编译器配置

    最近由于各种原因,IDE从source insight换成了vim,参考了诸多博客的文章,折腾了好久折腾了个大概的样子,现在总结一下经验: 主要参考: 改造vim变成source insight Wi ...

  6. ACM Wooden Stricks

    有一堆n根木棍.每根棍子的长度和重量是预先知道的. 这些棒子将被木工机器逐一加工..它需要一些时间,称为安装时间,用于机器准备加工棒.设置时间与机器中的清洁操作和更换工具和形状相关联.木工机械的安装时 ...

  7. springMVC源码解析--ViewResolverComposite视图解析器集合(二)

    上一篇博客springMVC源码分析--ViewResolver视图解析器(一)中我们介绍了一些springMVC提供的很多视图解析器ViewResolver,在开发的一套springMVC系统中是可 ...

  8. Mac 下 查看 使用某端口的进程和关闭该进程的命令

    查看使用某端口的进程 最简单的命令是: lsof -i :端口号 如果要使用管理员权限那么就是: sudo lsof -i :端口号 所以查看 使用某端口号3000的进程可以使用: lsof -i : ...

  9. Android Multimedia框架总结(二十)MediaCodec状态周期及Codec与输入/输出Buffer过程(附实例)

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53183718 前言:前面几节都是 ...

  10. Android Multimedia框架总结(十六)Camera2框架之openCamera及session过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52942533 前言:前一篇介绍了 ...