深度剖析malloc、free和new、delete
1、malloc,free是C语言的函数,而new,delete是操作符,属于C++的语法,一定注意这两个不再是函数了,而是操作符。
2、malloc和new对于分配基础类型变量和数组变量,它们除了语法上有些区别,比如
demo
////分配基础类型
int main()
{
//
int *p = (int *)malloc(sizeof(int));
*p = 10;
//free(p);
delete p;
int *p2 = new int; //分配基础类型
*p2 = 20;
free(p2);
//
int *p3 = new int(30);
printf("*p3:%d \n", *p3);
//delete p3;
free(p3);
return 0;
}
//分配数组变量
int main()
{
//c语言分配数组
int *p = (int *)malloc(sizeof(int) * 10); //int array[10];
p[0] = 1;
//free(p);
delete[] p;
//c++分配数组
int *pArray = new int[10] ;
pArray[1] = 2;
//delete [] pArray; //数组不要把[] 忘记
free(pArray);
char *pArray2 = new char[25] ; //char buf[25]
delete [] pArray2;
return 0;
}
3、除了语法的区别,他们实际的作用没有什么不同,而且用malloc分配的可以用delete释放,new分配的也可以用free释放。但是对于类对象的分配,它们的区别比较明显
demo
class Test
{
public:
Test(int _a)
{
a = _a;
cout<<"构造函数执行" <<endl;
}
~Test()
{
cout<<"析构函数执行" <<endl;
}
protected:
private:
int a;
};
//分配对象 new delete
//相同和不同,new能执行类型构造函数,delete操作符,能执行类的析构函数
int main()
{
//c
Test *pT1 = (Test *)malloc(sizeof(Test));
//free(pT1);
delete pT1;
//c++
Test *pT2 = new Test(10);
//delete pT2;
free(pT2);
<span style="white-space:pre"> </span>return 0;
}
用new和delete时,会分别调用类的构造函数和析构函数,而此时malloc和free就无力了。
深度剖析malloc、free和new、delete的更多相关文章
- 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析
[渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...
- 读书笔记之:C语言深度剖析
读书笔记之:C语言深度剖析 <C 语言深度解剖>这本书是一本“解开程序员面试笔试的秘密”的好书.作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中 ...
- libevent源码深度剖析六
libevent源码深度剖析六 ——初见事件处理框架 张亮 前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析 lib ...
- 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的无状态模 ...
- Mysql binlog应用场景与原理深度剖析
1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...
- http之抽丝剥茧,深度剖析http的那些事儿
最近,小编一心扎跟学技术,毫不顾及头发的掉落速度,都快成地中海了,不过也无大碍,谁让咱是一个爱钻技术的男人呢.最近两周老是看到http,那么这个http,有哪些猫腻呢,很多同学都有这种理解,就是对于h ...
- Axios源码深度剖析
Axios源码深度剖析 - XHR篇 axios 是一个基于 Promise 的http请求库,可以用在浏览器和node.js中,目前在github上有 42K 的star数 分析axios - 目录 ...
- 《AngularJS深度剖析与最佳实践》简介
由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...
随机推荐
- AMD,CMD,UMD,CommonJS
http://www.jianshu.com/p/bd4585b737d7 http://www.jianshu.com/p/09ffac7a3b2c
- C++Sizeof与Strlen的区别与联系
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- kibana使用
最近,被老大叫写一个kibana的使用方法给所有人用. 注意的一点: 能不用空格表示OR或者AND就不用空格表示,因为要么全用要么全部不用,否则会因为解析搜索同级的时候,若出现空格和OR,会冲突覆盖意 ...
- Printer for Me
今天,良心系部终于给我配了打印机^^. 办公室门外还挂了牌子.
- ubuntu 下查看caj文件
知网的学位论文只有CAJ版,而我又偏偏使用Ubuntu,所以就有了这篇文章. 前端时间发现第一种方法在ubuntu 16 上不行, 请使用第二种方法. 第一种方法: 环境:Ubuntu 14.04 6 ...
- 原生js去掉所有的html标签,最终得到HTML标签中的所有内容
替换掉所有的 html标签,最终得到Html标签中的内容 <script> //替换掉所有的 html标签,最终得到Html标签中的内容 var req="<div sty ...
- 全网代理公开ip爬取(隐藏元素混淆+端口加密)
简述 本次要爬取的网站是全网代理,貌似还是代理ip类网站中比较有名的几个之一,其官网地址: http://www.goubanjia.com/. 对于这个网站的爬取是属于比较悲剧的,因为很久之前就写好 ...
- Node.js 模块系统
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块, ...
- django的流程和命令行工具
django实现流程django #安装: pip3 install django 添加环境变量 #1 创建project django-admin startproject mysite ---my ...
- SQL Server AlwaysON从入门到进阶(2)——存储
本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节讲解关于SQL Server 存储方面的内容,相对于其他小节而言这节比较短.本节会提供一些关于使用群集或者非群集系统过程 ...