c++ 中new和c中的malloc的区别

来源:互联网 发布:如何利用淘宝客赚钱 编辑:程序博客网 时间:2024/05/13 11:52

每一个程序在执行的时候都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或者堆(heapC语言中使用malloc和free在自由存储区中分配存储空间,C++语言则使用new和delete表达式来实现相同的功能 )(heap 和free store是同义词)

 

(1)c++ 中的new和delete是操作符, 可以重载,只能在c++中使用

          当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变   量,  那么第二步会被省略。

          在使用new和delete的时候要注意new 和delete  new[] 和delete[] 要成对的使用

int *a1= new int(1024); //a1的值是1024delete a1;int *a1=new int[1024]; //建立一个无初始化的动态数组if(a1==NULL) return 0; //判断是否创建成功delete[] a1;a1=NULL;   //为了避免野指针的出现int *a2=new int[10](); //圆括号要求对数组做值初始化

动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化,如果数组元素师内置类型则无初始化

对于动态分配的数组,其元素只能初始化为元素类型的默认值,而不能像数组变量一样用初始化列表为数组元素提供各种不同的初值

const 对象的动态数组必须为这个数组提供初始化

const int *a3=new const int[4]();

关于new和delete的重载,有一篇日志,我没大细看,http://blog.csdn.net/songthin/article/details/1703966

(2)malloc和free是函数,可以覆盖,在c和c++中都可以使用
           malloc和free函数的原型

void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。

关于分配失败的原因,应该有多种,比如说空间不足就是一种。

void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。

char *ptr=(char *)malloc(20*sizeof(char));free(ptr);

更详细的说明可以看http://blog.csdn.net/r91987/article/details/6337032

(3)new可以调用对象的构造函数,delete可以调用相应的析构函数

          malloc和free仅仅分配和回收内存,并不调用构造或析构函数

(4)new和delete返回的是某种数据类型指针, malloc和free 返回的是void指针

 

 

 

 

         

 


 

 

          

原创粉丝点击