面试被问到上述问题,所以特地总结一下:

一、new和malloc的区别。

1.new可以返回指定类型的指针,并且自动分配内存大小;malloc需要计算手动计算分配空间的大小,并且返回值需要强转为实际类型的指针。

2.malloc只会进行内存分配,不会进行初始化,所以其值是随机的;new在内存分配的同时会进行初始化。

3.malloc分配失败会返回空指针NULL;new分配失败会抛出std::bad_alloc异常

这里插入一个例子(还没太明白,先mark在这里)

#include<iostream>
using namespace std; void* operator new(std::size_t) throw (std::bad_alloc)
{
throw bad_alloc();
} void operator delete(void* p) throw()
{
} class widget
{
public:
widget()
{
cout << "widget()" <<endl;
}
}; int main()
{
try
{
widget *pw1 = new widget;// 分配失败抛出std::bad_alloc
if(pw1 == ) // 这个检查一定失败
{
cout << "pw1" <<endl;
}
}
catch(...)
{
cout << "throw "<< endl;
} try
{
widget *pw2 = new (nothrow) widget; // 若分配失败返回0
if(pw2 == ) // 这个检查可能会成功
{
cout << "pw2" <<endl;
}
}
catch(...)
{
cout << "throw "<< endl;
} return ;
}

4.有了malloc/free为什么还要new/delete?

简而言之:malloc/free是库函数,new/delete是C++的运算符。malloc/free不能执行构造函数和析构函数,在动态分配内存的时候也不能进行初始化,不能完成对象的内存管理。

5.有了new/delete为什么还要malloc/free?

因为C++经常调用C函数,而C程序只能用malloc/free管理动态内存。

(参考:http://www.cnblogs.com/fly1988happy/archive/2012/04/26/2470542.html)

二、delete和delete []区别

delete 释放new分配的单个对象指针指向的内存
delete[] 释放new分配的对象数组指针指向的内存

1.对于简单类型来说

int *a = new int[10];
   delete a;
   delete [] a;

两者效果相同。

2.对于自定义的对象来说

A *a = new A[10];

delete a;

delete []a;

delete a只会调用a[0]的析构函数,a[1]-a[9]分配的空间不会被释放。

delete []a;会调用a[0]-a[9]的析构函数,释放a指针指向的全部内存空间,会逐一调用对象的析构函数。

(参考:https://www.cnblogs.com/wangjian8888/p/7905176.html)

三、使用new[]/delete[]时的内存分布情况

对非内置对象new[]时会多分配4个字节,因为需要存放析构时的对象个数,对于内置类型则不需要这个4个字节。

(参考https://blog.csdn.net/qq_33573235/article/details/79485266,讲的非常详细了)  

new和malloc区别,delete和delete []区别的更多相关文章

  1. malloc/free与new/delete的区别

    相同点:都可用于申请动态内存和释放内存 不同点:(1)操作对象有所不同.malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符.对于非内部数据类的对象而言,光用m ...

  2. malloc free 和new delete区别

    从网上看的学习之 1. malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,与"+“.”-“.”*“.”/“有一样的地位. 2. new/delete是 ...

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

    一.基本概念 malloc/free 1.函数原型及说明: void* malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回 ...

  4. new malloc和delete free 的区别

    今天看了一个面试题:问new 和 malloc, delete 和 free 的区别,扭捏了半天,也没说完全:现总结如下: 1.先看看new 和 delete 看一个例子: <span styl ...

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

    相同点:(1)都是申请内存,释放内存,free和delete可以释放NULL指针:(2)都必须配对使用,这里的配对使用,可不能理解为一个new/malloc就对应一个delete/free,而是指在作 ...

  6. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

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

    百度笔试题:malloc/free与new/delete的区别 相同点:都可以申请动态内存和释放内存. 不同点: (1) 操作对象有所不同: malloc和free是C/C++的标准库函数,new和d ...

  8. malloc/free和new/delete的区别

    转自:http://blog.csdn.net/chance_wang/article/details/1609081 malloc与free是C++/C语言的标准库函数,new/delete是C++ ...

  9. malloc,free和new,delete之间的区别

    1.malloc free 是c语言里面的,不过在c++中也能使用,这个只是申请的一块内存,一般不能申请对象的内存空间:2.new delete,是c++的,申请的也是一块内存,只是这个可以申请对象. ...

随机推荐

  1. OpenCV中Mat总结

    一.数字图像存储概述 数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵. 二.Mat的存储 1.OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘 ...

  2. Python-Django基础

    django目录 -settings -urls -views ******强调:setting中'django.middleware.csrf.CsrfViewMiddleware'中间件先注释掉 ...

  3. Apache:SSLCertificateFile:文件不存在或为空(操作系统RHEL7)

    配置参数及报错信息(配置了TLS加密后httpd服务无法启动) 我在httpd.conf文件中引用了上面创建的文件.但在那之后,当我尝试RESTART Apache时,我遇到以下错误: 错误:SSLC ...

  4. python中关于变量名失效的案例

    案例一:传参动态导入模块. selectModule = input("please input your module name") app_name = input(" ...

  5. 微信小程序换皮肤,动态切换菜单栏和导航栏的样式,动态修改TabBar和NavigationBar

    在做微信小程序换皮肤的时候,需要动态修改菜单栏(TabBar)和导航栏(NavigationBar) 但是在小程序中它们的样式是写在app.json里面,而且app.json是静态编译,运行时哪怕你修 ...

  6. [原创]Zynq AXI-CDMA测试结果

    经过研究与demo,在zynq上使用axi-cmda效率还是很高,测试报告如下所示 对于读取32KB,GP0和HP0的测试结果如下:

  7. 精通ArrayList,关于ArrayList你想知道的一切

    目录 精通ArrayList,关于ArrayList你想知道的一切 前言 ArrayList 内部结构,和常用方法实现 实例化方法 添加元素 add()方法 get()方法 移除元素 怎么扩容的 序列 ...

  8. 期货大赛项目|八,ueditor的应用

    百度开发的富文本编辑器还是很不错的,可以已经不维护了 下载ueditor1_4_3_3-utf8-net放到项目中 找到net文件夹下config.json 修改以下两行 "imageUrl ...

  9. codeforces 493 div1 e

    题解: 和这件zhcs的那题有点像 第一种做法是考虑i,i+1之间的贡献 这样子就是矩形加减然后求矩形最小值个数 另一种做法是我们从左向右维护mx-nx-r+l 跟之前那题一样我们知道这个的最小值为0 ...

  10. 一起学爬虫——使用xpath库爬取猫眼电影国内票房榜

    之前分享了一篇使用requests库爬取豆瓣电影250的文章,今天继续分享使用xpath爬取猫眼电影热播口碑榜 XPATH语法 XPATH(XML Path Language)是一门用于从XML文件中 ...