浅谈malloc/free和new/delete 的区别
malloc和new的区别
malloc是库函数,需要包头文件才能成功运行编译;new是操作符(C++中的关键字),需要在C++的环境下使用。
malloc既可以在C语言中使用也可以在C++中使用,new只能在C++中使用。
malloc传参需要自己计算空间大小(显示传参);new直接传类型,编译器自动识别类型所需空间大小。
malloc返回值是一个void*的指针,需要强制转换成我们所需要的类型才能进行操作;new返回的是一个对象指针,严格匹配对象类型(new是一个类型安全的操作符),可直接操作。
malloc失败后返回NULL,new失败后抛异常。
malloc需要手动初始化开辟的空间,new自动调用构造函数初始化所开辟的空间。
malloc不支持被重载,new可以被重载。
malloc所申请的内存是从堆上分配的,new所申请的空间是从自由存储区分配的,自由存储区不等于堆(取决于operator new在哪里为对象分配内存)。
malloc没有支持对应数组动态增容的快捷方式,new中有相应的new[]来进行数组动态增容的操作。
free和delete 的区别
free是库函数,需要包头文件才能成功运行编译;delete是操作符(C++中的关键字),需要在C++的环境下使用。
free既可以在C语言中使用也可以在C++中使用,delete只能在C++中使用。
free只释放malloc所开辟的内存空间,delete自动调用对象的析构函数析构对象并释放new所开辟的内存空间。
free不支持被重载,delete可以被重载。
free只能和malloc搭配使用,如果和new搭配编译不通过;delete既能跟malloc搭配使用,又能和new搭配使用,但由于和malloc搭配使用可读性太差,所以不建议使用delete搭配malloc。
为什么有了new/delete后,还要保留malloc/free?
很多C++程序里需要调用C函数,C语言中只能用malloc/free管理动态内存。
浅谈malloc/free和new/delete 的区别的更多相关文章
- 浅谈 drop、truncate和delete的区别
(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独 ...
- 浅谈Nginx负载均衡和F5的区别
前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处 ...
- 浅谈Nginx负载均衡与F5的区别
前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道“墙”,将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问 ...
- 【转】浅谈Nginx负载均衡与F5的区别
前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道“墙”,将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问 ...
- c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义
4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...
- 百度笔试题:malloc/free与new/delete的区别(转)
百度笔试题:malloc/free与new/delete的区别 相同点:都可以申请动态内存和释放内存. 不同点: (1) 操作对象有所不同: malloc和free是C/C++的标准库函数,new和d ...
- 转 浅谈C++中指针和引用的区别
浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性 ...
- 浅谈 HTTP中Get与Post的区别
浅谈 HTTP中Get与Post的区别 存在的误区 有人说 HTTP 协议下的 Get 请求参数长度是有大小限制的,最大不能超过XX,而 Post 是无限制的,看到这里,我想他们定是看多了一些以讹传讹 ...
- malloc/free与new/delete的区别与联系
相同点:(1)都是申请内存,释放内存,free和delete可以释放NULL指针:(2)都必须配对使用,这里的配对使用,可不能理解为一个new/malloc就对应一个delete/free,而是指在作 ...
随机推荐
- 【Asp.net入门03】第一个ASP.NET 应用程序-创建ASP.NET项目
本部分主要内容: 创建并运行Asp.net项目 web窗体 数据模型 调用代码隐藏方法 数据验证 1.操作步骤 第一步:启动Visual Studio 2013,然后从File(文件)菜单中选择New ...
- Redis3未授权访问漏洞导致服务器被入侵
今天在腾讯云上搭的开发环境里的一台机器cpu load飚升老高,然后还能登陆上去,top后发现两个可疑进程./root/目录下有修改过的文件./opt目录被干掉了, 后经分析,这台机器上有redis外 ...
- 利用Azure Media Services Explorer发布VOD视频
1.连接Media Services账号, 填入Media Services的账号以及Account Key 如果使用中国的Azure的话,需要在Endpoint节上更改一下,因为国内的Azure的接 ...
- php 通过链接生成二维码,扫码支付用到
$(".good_info").on('click',function () { var id = $(this).data('id'); var string='http://q ...
- linux命令总结dd命令详解
一:dd命令 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: if=文件 ...
- Kafka 0.8 Consumer Rebalance
1 Rebalance时机 0.10kafka的rebalance条件 条件1:有新的consumer加入 条件2:旧的consumer挂了 条件3:coordinator挂了,集群选举出新的coor ...
- django project 的快速构建
2003年,堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组 ——World Online 小组,为了方便制作维护当地的几个新闻站点(一般要求几天或者几小时内被建立),Adrian ...
- Calculus on Computational Graphs: Backpropagation
Calculus on Computational Graphs: Backpropagation Introduction Backpropagation is the key algorithm ...
- 七、新时间日期 API
一.使用 LocalDate. LocalTime. LocalDateTime LocalDate. LocalTime. LocalDateTime 类的实例是不可变的对象,分别表示使用 ISO- ...
- Java入门系列(一)基础概览
序言 Java语言的特点不使用指针而使用引用.