malloc,free和new,delete有区别吗?如果有,是什么?

如题所述

1 我认为new\delete和malloc\free最大区别是对对象的理解。
如果你使用
Foo* foo = malloc(sizeof(Foo));//Foo是一个类
初始化,那么你将不会调用Foo的构造方法,而只是单纯的分配空间。而且我们只认为你是分配一个空间,而不是想创建一个对象。
Foo* foo = new Foo();则会调用Foo的构造方法来初始化对象,也就是说你既要分配空间又要初始化这段空间,让它变成一个对象。
对于delete和free也有同样的问题,就是delete会调用析构函数,free则不会。
说白了,new\delete玩的是对象,而malloc\free仅仅是内存空间而已

2 对于除去对象意外的其他情况,比如int和float等
int* Array=new int[10];和int* Array=malloc(sizeof(int)*10);只存在使用技巧的差别,没有本质的差别。

3 最后也提醒你new\delete和malloc\free只能成对使用,不能混了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-10-12
malloc 只是分配指定大小的内存;
free 也只是释放之前申请的内存;
new 在分配内存后,还会调用分配的对象的构造函数;
delete 在释放之前分调用对象的析构函数;
第2个回答  推荐于2018-03-15
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
2, 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存

new 是个操作符,和什么"+","-","="...有一样的地位

简单的说:
malloc,free是c的函数,new,delete是c++的运算符

此外,new是强制类型的,malloc不是,需要类型转换
当然还有很多不同
new 可以调用构造函数在声明的时候初始化
malloc只是分配空间,需要在其他地方初始化

而delete不仅会释放空间,在释放前会调用析构函数

而且malloc需要指定分配空间大小, 而new是自动计算的本回答被提问者和网友采纳

C++中,new\/delete和malloc\/free的区别
1、new\/delete是C++的操作符,而malloc\/free是C中的函数。2、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。3、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它...

在C语言中malloc,free,new,del,?
1,malloc与free是C++\/C语言的标准库函数,new\/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2, 对于非内部数据类型的对象而言,光用maloc\/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc\/free是库函数而不是运算符,不在...

c++中有malloc\/free 为什么还要new\/delete
1. new\/delete是C++里才有的,而new\/delete与malloc\/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在所有的new操作过程中,总是分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需要先调用析构函数,然后在销毁堆...

C++中new和delete比 malloc和free有哪些优点?
malloc与free是C++\/C语言的标准库函数,new\/delete是C++的运算符。它们都可用于申请动态内存和释放内存 2.对于非内部数据类型的对象而言,光用maloc\/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc\/free是库函数而不是运算符,不在编译器控...

new与malloc的区别以及实现方法
new\/delete和malloc\/free之间的区别有哪些?1. malloc和free是库函数,而new和delete是C++操作符;2. new自动计算所需空间大小,例如“int *a = new”,而malloc需要指定大小,例如“int *a = malloc(sizeof(int))”;3. new在动态分配内存时可以初始化对象,调用其构造函数,delete在释放内存时...

在C++中,使用malloc申请的内存能否通过delete释放?使用new申请的...
不能,malloc \/free主要为了兼容C,new和delete 完全可以取代malloc \/free的。malloc \/free的操作对象都是必须明确大小的。而且不能用在动态类上。new 和delete会自动进行类型检查和大小,malloc\/free不能执行构造函数与析构函数,所以动态对象它是不行的。当然从理论上说使用malloc申请的内存是可以通过...

经典面试题之new和malloc的区别
经典面试题之new和malloc的区别 在C++语言中,new和malloc是进行内存分配的两种方式,它们在属性、参数、返回类型、分配失败处理、自定义类型处理、重载以及内存区域等方面存在显著差异。属性上,new和delete是C++语言的关键字,需要编译器支持,而malloc和free是库函数,需要包含头文件。new操作符在申请内存时...

free和delete区别
作用、使用场景等区别。1、作用:free是C语言中用来释放内存的函数,delete是C++语言中用来释放内存的运算符。2、使用场景:free用于释放malloc分配的内存,delete用于释放new分配的内存。

new和malloc进行空间分配的区别
1、new 是c++中的操作符,malloc是c 中的一个函数 2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数 3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那...

C++中,直接调用类的构造函数的同时就会调用析构函数
s::s();\/\/构造一个临时的匿名对象,该对象在遇到分号后消亡*sp = s::s(); \/\/同上,这里s::s()构造的是匿名对象,遇到分号后消亡,\/\/s::s()的作用是用来做为中间量传给sp,但sp不会消亡delete sp;\/\/delete调用析构函数 free不会调用,这是常识若有不明白的,请追问,满意请采纳~...

相似回答