C/C++——new/delete和malloc/free的区别
new/delete和malloc/free的区别
- 扩容操作:
对于malloc是有一个realloc函数对应用于扩容的;
对于new,只能再new一个,for循环赋值过去,把原来的delete掉;
- 对于 对象:
malloc只进行空间的申请,不调用构造函数初始化对象。free也不会调用析构函数。
这段代码什么也不会输出。
#include <iostream>
using namespace std; class A {
public:
int x;
A() {
x = ;
cout << "constructor." << endl;
}
~A() {
cout << "destructor." << endl;
}
};
int main() {
A *a = (A *)malloc(sizeof(A));
free(a);
return ;
}
使用new操作符的三个步骤:
- 调用operator new() 函数 分配用于存储 相应对象的 指定大小的 内存空间。
- 调用 构造函数。
- 返回指向该对象的指针(malloc返回的是void *指针)。
使用delete操作符的两个步骤:
- 调用 析构函数。
- 调用operator delete() 函数释放内存空间。
PS:上次用C++写单链表,还因为 1 出了错,X_X。
~LNode() {
LNode *p = this->next;
while (p) {
LNode *t = p->next;
delete p;
p = t;
}
}
- new/delete可以进行重载
C++对new/delete函数进行了很多类型的重载,通常底层是用malloc/free来实现的。
其他还有一些我们已经当成习惯的区别:
- 在处理数组时,free(array); delete[] array;
- 内存分配失败,new会抛出异常,malloc会返回NULL,所以一般用malloc后面都会加 if ( ..... == NULL )
- 一个是C语言的库函数,需要#include<malloc.h>;一个是关键字。
- 对于C语言程序(*.c文件),只能使用malloc/free。
- 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。
此外还有一些
node* n1 = (node*)malloc(sizeof(node));//只会分配内存空间
//对于下面两个,如果没重写了默认构造函数,则它们是没有区别的
//如果没有自己重写默认构造函数(当然也没有写构造函数),则new node只是分配内存空间,new node()会调用默认构造函数
node* n2 = new node;
node* n3 = new node();
C/C++——new/delete和malloc/free的区别的更多相关文章
- new/delete 和malloc/free 的区别
new/delete 和malloc/free 的区别 一.基本概念malloc/free:1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumB ...
- new/delete与malloc/free的区别
new/delete与malloc/free的区别 参考: https://blog.csdn.net/u013485792/article/details/51329541 https://www. ...
- new/delete和malloc/free的区别
通俗易懂版本:http://zhidao.baidu.com/question/86185100 1 new/delete和malloc/free最大区别是对对象的理解. 如果你使用 Foo* foo ...
- new/delete 与 malloc/free的区别
一.概述 在C++中,申请动态内存与释放动态内存用new/delete 与 malloc/free都可以,而且他们的存储方式相同,new/malloc申请的动态内存位于堆中,无法被操作系统自动 ...
- C++中,new/delete和malloc/free的区别
1.new/delete是C++的操作符,而malloc/free是C中的函数. 2.new做两件事,一是分配内存,二是调用类的构造函数:同样,delete会调用类的析构函数和释放内存.而malloc ...
- [C/C++] new/delete和malloc/free基本区别
/**便于遗忘时复习**/ 区别一:本质 new/delete 在C++中是运算符不是函数,需要编译器支持.malloc/free是库函数,需要头文件支持,在C语言中使用. 区别二:开辟内存大小 用 ...
- new/delete、malloc/free 的区别
相同点 1.都可以动态的申请或释放内存 2.存储方式相同,动态申请的内存都存放在堆中,无法自动释放,要调用对应的delete和free 区别 1.new能自行的计算需要分配的空间,malloc需要 ...
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
1. 引用本身是有指针实现的:引用为只读指针 例子: int d=123; int& e=d; //引用 int * const e=d; //只读指针,e指向d,不可修改e指 ...
- new、delete与malloc、free的详解
内容清单: 1. C语言中的函数malloc和free 2. C++中的运算符new和delete 3. new/delete与malloc/free之间的联系和区别 4. C/C++程序的内 ...
随机推荐
- linux运维工程师成长过程
原文地址:https://blog.csdn.net/kwame211/article/details/78059331 初级篇 linux运维人员常用工具拓扑详见: 1rsync工具 很多地方经常会 ...
- node错误集合
1.端口被占用 node .\app.js events.js:167 throw er; // Unhandled 'error' even 解决办法:8888端口被占用了,更改一个端口就好 2. ...
- JS实现一位数显示为两位
使用js脚本实现页面一位数字显示为两位,不足两位前面加“0”. function fix(num, length) { return ('' + num).length < length ? ( ...
- 从Linux系统安装到Web应用启动教程
概述 本文讲述web应用服务器安装配置教程,其中包括:Linux系统安装,Mysql数据库安装配置,Redis安装配置,Tomcat安装配置,MongoDB安装配置,Linux JDK安装使用,Ngi ...
- 【SSH网上商城项目实战11】查询和删除商品功能的实现
转自:https://blog.csdn.net/eson_15/article/details/51360804 在第8节我们完成了查询和删除商品类别的功能,那么现在实现查询和删除商品的功能就很好做 ...
- Hunger Snake
除了驱动的效果.
- bzoj P3884 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- FCC的javascript初级算法题解答
FCC上的javascript基础算法题 前一阵子做的基础算法题,感觉做完后收获还蛮大的,现在将自己的做法总结出来,供大家参考讨论.基本上做到尽量简短有效,但有些算法还可以继续简化,比如第七题若采用正 ...
- drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法二
drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一 中介绍了ckeditor的安装和配置方法,其实还有另一种新方法,不用IMCE模块. 不过需要ckfinder的JS库,可以 ...
- 移动前端调试页面–weinre
安装 npm install -g weinre 启动 weinre --boundHost -all- 浏览器查看 http://localhost:8080 插入相关文件 index.html d ...