new/delete 与 malloc/free的区别

一、概述

在C++中,申请动态内存与释放动态内存用new/delete 与 malloc/free都可以,而且他们的存储方式相同,new/malloc申请的动态内存位于堆中,无法被操作系统自动回收,需要对应的delete也free释放空间。

malloc/free是C/C++语言的标准库函数,在C语言中需要头文件#include<stdlib.h>的支持。而new/delete是C++的运算符。对于类对象而言,malloc/free无法满足动态对象的要求,对象要求在创建的同时自动执行构造函数,对象消亡时自动执行析构函数,malloc/free不在编译器的控制权限之内,无法执行构造函数和析构函数。

二、区别

1、new能自动计算需要分配的内存空间,而malloc需要手工计算字节数。

int *p = new int[2];
int *q = (int *)malloc(2*sizeof(int));

2、new与delete直接带具体类型的指针,malloc和free返回void类型的指针。

3、new类型是安全的,而malloc不是。例如int *p = new float[2];就会报错;

而int *p = malloc(2*sizeof(int))编译时编译器就无法指出错误来。

4、new一般分为两步:new操作和构造。new操作对应与malloc,但new操作可以重载,可以自定义内存分配策略,不做内存分配,甚至分配到非内存设备上,而malloc不行。

5、new调用构造函数,malloc不能;delete调用析构函数,而free不能。

6、malloc/free需要库文件stdlib.h的支持,new/delete则不需要!

三、注意事项

delete和free被调用后,内存不会立即回收,指针也不会指向空,delete或free仅仅是告诉操作系统,这一块内存被释放了,可以用作其他用途。但是由于没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化,出现野指针的情况。因此,释放完内存后,应该讲该指针指向NULL。

时间: 2024-12-11 14:45:25

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

new/delete与malloc/free的区别

参考: https://blog.csdn.net/u013485792/article/details/51329541 https://www.cnblogs.com/lyl-312/p/5528892.html http://www.cnblogs.com/QG-whz/p/5140930.html https://blog.csdn.net/gukesdo/article/details/7506155 本文在写作中参考了上述文章,特此感谢! [导语] 之前对new和delete,mal

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

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

new/delete 和 malloc/free 的区别

1.malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存.但是new能够自动分配空间大小,而malloc需要计算字节数. 2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数.由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free. 因此C++语言

new delete和malloc free的区别

部分内容摘自:http://www.52rd.com/bbs/Archive_Thread.asp?SID=209143&TID=3&WebShieldDRSessionVerify=QWlrR3KW8IElo27YO6zv 一.他们分别是什么 new和delete是c++中的操作符,malloc和free是c/c++的标准库函数. 在使用完分配的内存时,要及时用delete和free进行内存释放,避免内存泄漏. 二.他们之间的区别 1.malloc的原型为:void * malloc(s

new/delete、malloc/free 的区别

相同点 1.都可以动态的申请或释放内存 2.存储方式相同,动态申请的内存都存放在堆中,无法自动释放,要调用对应的delete和free 区别 1.new能自行的计算需要分配的空间,malloc需要手动计算字节数 int *p1 = new int[10]; int *p2 = (int*)malloc(10*sizeof(int)); 2.new和delete直接带具体类型的指针,malloc和free返回void类型的指针 void *p2 = malloc(10*sizeof(int));

C++中,new/delete和malloc/free的区别

1.new/delete是C++的操作符,而malloc/free是C中的函数. 2.new做两件事,一是分配内存,二是调用类的构造函数:同样,delete会调用类的析构函数和释放内存.而malloc和free只是分配和释放内存. 3.new建立的是一个对象,而malloc分配的是一块内存:new建立的对象可以用成员函数访问,不要直接访问它的地址空间:malloc分配的是一块内存区域,用指针访问,可以在里面移动指针:new出来的指针是带有类型信息的,而malloc返回的是void指针. 4.ne

new 、delete和malloc、free的解析及区别

在c语言中使用函数malloc和free来进行内存管理(分配与释放),在c++中则提供了运算符new和delete来做同样的工作,后者比前者性能更优越,使用更方便更灵活. 1.new用于内存分配的基本形式为: 指针变量名=new 类型 在程序运行过程中new是从堆的一块自由存储区中为程序分配一块与类型字节数相适应的内存空间,并将该块内存的首地址存于指针变量中. eg. int *p;   //声明一个整形指针变量p p=new int;   //动态分配一个存放int型数据的内存空间,并将首地址

new/delete 和 malloc/free有什么区别和联系

区别: 1. new/delete是C++的操作符,malloc/free是C/C++标准库函数. 2. new分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象.同样,在调用delete的时候,需要先调用析构函数,然后再回收堆内存.malloc只会根据参数分配内存,默认返回指向void*的指针,同样free释放malloc分配的内存. 3.malloc/free是new/delete的一个子集. 共同点: 1. 都必须配对使用,这里的配对使用,可不能理解为一个new/malloc就

关于new,delete,malloc,free的一些总结

首先,new,delete都是c++的关键字并不是函数,通过特定的语法组成表达式,new可以在编译的时候确定其返回值.可以直接使用string *p=new string("asdfgh");来直接赋值.这其中在调用new分配空间得时候的时候,系统其实直接调用了类或结构的构造函数来对对其进行赋值,这个过程就相当于是string p=string("asdfgh"); 或者string p("asdfgh");(其实上面的过程还是有一定的不同之处: