malloc/free 与 new/delete的区别

区别:

1、malloc与free是C/C++语言的标准库函数,new/delete是C++的运算符;

2、new自动计算需要分配的空间,而malloc需要手工计算字节数;

3、new是类型安全的,而malloc不是;比如:

int* p = new float[2];//编译错误;

int* p = (int*)malloc(2*sizeof(double));//编译时无法指出错误

4、new调用operator new分配足够的空间,并调用相关对象的构造函数,而malloc不能调用构造函数;delete将调用该实例的析构函数,然后调用类的operator delete,以释放该实例占用的空间,而free不能调用析构函数;

5、malloc/free需要库文件支持,new/delete则不需要。

时间: 2024-10-27 13:11:54

malloc/free 与 new/delete的区别的相关文章

百度笔试题:malloc/free与new/delete的区别(转)

百度笔试题:malloc/free与new/delete的区别 相同点:都可以申请动态内存和释放内存. 不同点: (1) 操作对象有所不同: malloc和free是C/C++的标准库函数,new和delete是C++的运算符.对于非内部数据类的对象而言,光用malloc/free 无法满足动态对象的要求.对象在创建时要自动执行构造函数,对象消亡之前要自动执行析构函数,malloc和free是库函数而不是运算符,不在编译器的控制权限之内,不能够把执行构造函数和析构函数的任务强加给malloc/f

malloc/free与new/delete的区别

相同点:都可用于申请动态内存和释放内存 不同点:(1)操作对象有所不同.malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符.对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求.对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数.由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加malloc/free. (2)用法上也有所不同.函数malloc 的原

malloc/free和new/delete的区别汇总

一.基本概念 malloc/free 1.函数原型及说明: void* malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL). void free(void* FirstByte):该函数是将之前用malloc分配的空间还给程序或者操作系统,也就是释放了这块内存,让它重新得到自由. 2.内存操作: malloc函数的参数是接受需要分配的内存字节数,如果内存能够满足请求量,那么将会返回,指向被分配的内

malloc/free 与 new/delete的区别和联系

一.基本概念  malloc/free: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL). void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由. 2.内存操作: malloc函数的参数是接受需要分配的内存字节数,如果内存能够满足请求量,那么将会返回:指向被

malloc/free与new/delete的区别与联系

它们都是动态管理内存的入口: malloc/free 是c/c++标准的库函数,而new/delete是c++的操作符: malloc/free只是动态分配内存空间/释放空间,而new/delete除了分配空间还调用构造函数和析构函数进行初始化与清理: malloc/free需要手动计算类型的大小且返回值为void*,new/delete可自己计算类型的大小,返回对应类型的指针.

Malloc/free 与 new/delete 的区别

前者: 是C的库函数. 在C++中创建对像时,不会调用构造函数,FREE时也不会调用析构函数 . 后者: 是C++中运算符, 创建析构对象都会调用构造函数,与析构函数.

C/C++语言的标准库函数malloc/free与运算符new/delete的区别

概括地说 1.malloc与free是C++/C的标准库函数,new/delete是C++的运算符,它们都可用于申请动态内存和释放内存. 2.对于非内部数据类型的对象而言,只用malloc/free无法满足动态对象的要求.对象在创建的同时,要自动执行构造函数,对象在消亡之前要自动执行析构函数.而由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free. 3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符

malloc free 和new delete区别

从网上看的学习之 1. malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,与"+"."-"."*"."/"有一样的地位. 2. new/delete是可以重载的,而重载之后,就成为了函数. 3. malloc在申请内存的时候,必须要提供申请的长度,而且返回的指针是void*型,必须要强转成需要的类型. 4. 当new/delete在类中被重载的时候,可以自定义申请过程,比如记录所申请内存

malloc/free、new/delete 区别

1. Malloc:malloc/free是C++和C的标准库函数,可用于申请动态内存和释放内存.对于非内部数据类型的对象而言,光用 malloc/free无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数.由于malloc/free是 库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free. 2. New:new/delete是C++的运算符.可用于申请动态内存和释放内存.C++语言需要一个能完成动