所在的位置: C++ >> C++介绍 >> newdelete与mallocfree

newdelete与mallocfree

公益中科 http://pf.39.net/xwdt/171128/5882648.html

new和malloc都是常用的申请动态内存方式,他们有以下区别:

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

2、new/delete比malloc/free更智能,在申请和释放内存时会自动调用对象的构造函数和析构函数(其底层仍靠malloc/free来实现),malloc则只管分配内存并不对所得的内存初始化;

3、返回类型不同,new返回的是指定类型的指针,且自动计算所需内存的大小,malloc返回的是void*型,需要手动进行数据类型转换,且内存大小需要手动计算;

如:

int*pint_n=newint[10];//返回类型为int*型,申请内存大小为sizeof(int)*10;

int*pint_m=(int*)malloc(10*sizeof(int));//返回的是void*型,需手动强转为int*型

4、如果申请内存失败,表现形式不同,malloc申请内存失败后返回空指针NULL,new申请失败则抛出异常,直接比较指针是否为空是没有意义的,需要用try、catch的方式捕获异常;

如:

5、处理数组的方式不一样,C++提供了new[],delete[],可以通过构造函数和析构函数来逐个处理数组元素,malloc和free则不区分数组还是普通对象,更为佛系。

注意

执行delete删除指针执向的内存后,p变成了不确定指针(悬垂指针),这很容易导致程序运行错误,需要手动指定其值为NULL;

不管使用new还是malloc申请的动态内存,千万不要忘记最后使用对应的delete或free手动释放内存,要不然很容易造成内存溢出,造成不必要的严重后果。




转载请注明:http://www.aierlanlan.com/rzfs/2070.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了