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++程序的内 ...
随机推荐
- Visual Studio for Mac 安装无响应或者无法连接网络等解决方法
1.无法连接到网络 2.点击安装和更新无响 这两种情况造成的原因都是由于被墙的原因,第一种情况有部分可以通过fq解决,第二种情况是我遇到过的 反正我全局也失败 这里给出一个我自己用过的解决方案 查看控 ...
- PHP反射ReflectionClass、ReflectionMethod 学习笔记 (一)
PHP5 具有完整的反射API,添加对类.接口.函数.方法和扩展进行反向工程的能力. 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括 ...
- golang命令和VSCode配置
Go是一门全新的静态类型开发语言,具有自动垃圾回收.丰富的内置类型.函数多返回值.错误处理.匿名函数.并发编程.反射等特性 golang常用命令: go env #查看go的环境 echo %GORO ...
- DLL文件
Dll文件的全称是Dynamic Link Library,中文意思为动态链接库,DLL文件是不可执行文件,其是一个包含由多个程序同时使用的代码和数据的库,动态链接提供了一种方法,使进程可以调用不属于 ...
- php之连接mssql(sql server)新手教程
ps:网上搜了很多教程,讲的都很好,就是都有点漏的地方,花了一天时间查缺补漏终于弄好了(;´༎ຶД༎ຶ`),希望我的教程能帮到新手,还有写博客的时候因为不小心按错一个键,导致重写了,博客园这个编辑器真 ...
- CF17E Palisection
题意 给定一个长度为n的小写字母串.问你有多少对相交的回文子串(包含也算相交) 相交的回文子串个数 \(mod\ 51123987\) Sol 求相交的回文子串不太好求 考虑用总数减去不相交的回文串个 ...
- css常见的快捷开发代码汇总(长期更新)
http://caibaojian.com/popular-css-snippets.html
- 关于META你知道多少
META标签,是HTML语言head区的一个辅助性标签.在几乎所有的page里,我们都可以看 到类似下面这段html代码: -------------------------------------- ...
- Swiper轮播图
今天咱们来说一下.Swiper轮播图. 超级简单的: 翠花,上代码: <!DOCTYPE html> <html lang="en"> < ...
- LeetCode赛题391----Perfect Rectangle
#391. Perfect Rectangle Given N axis-aligned rectangles where N > 0, determine if they all togeth ...