C++面试题之一:内存

1.new、delete、malloc、free关系

->delete会调用对象的析构函数,free只会释放内存

->malloc和new都可用于申请动态内存和释放内存

->new是为了c++能够完成动态内存和初始化工作的运算符,以及能完成清理与释放内存工作的运算符delete.

->由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内。

2.delete与delete[]区别

->delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数.

->对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说,用new分配的内存用delete删除;用new[]分配的内存用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

3.new与malloc的区别

特征newmalloc
分配内存的位置自由存储区
内存分配失败返回完整类型指针void*
分配内存的大小由编译器根据类型计算得出必须显示指定字节数
处理数组有处理数组的new版本new[]需要用户计算数组的大小后进行内存分配
构造函数与析构函数调用不调用
分配内存时内存不足客户能够指定处理函数或重新制定分配器无法通过用户代码进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值