C++中new(delete)和malloc(free)的常见问题

C++中new(delete)和malloc(free)的常见问题

Q: "delete p"会释放"p"指针,还是"p"指向的内容"*p"?
A: 会释放"p"指向的内容"*p".
"delete"真正的含义是"delete the thing pointed to by";同样free(p)也是删除释放"p"指向的内容.
至于指针p没有做任何的改变,如果想让我们的程序更加健壮,建议加入下面的一行代码:
p = NULL;
尤其在程序中频繁使用p的时候,这行代码将显得很重要.

Q: 我能用"free()"掉由"new"申请到的,用"delete"掉由"malloc()"申请到的内存吗?
A: 不能.
malloc/free,new/delete必需配对使用!
free掉new申请出来的内存或delete掉malloc申请出来的内存该被痛骂一通.

Q: new/delete和malloc/free有什么区别?
A: 这是一个老问题, 面试官常会问到的问题.
可以从是否调用构造函数/析构函数,类型安全性,是否被重载三个方面讨论:
new/delete会调用构造函数/析构函数;
malloc()返回的是一个不具有类型安全性的"void *",而new会返回正确形态的指针;
new/delete是可以被重载的一个运算子;malloc/free是不能被重载的.

Q: 为什么C++不为"new"来搭建一个类型于"malloc"的realloc()的"函数"呢?
A: 避免产生意外.
realloc()这样的函数会破坏大部分的C++对象.

Q: 如何用new/delete去申请/释放数组?
A: 用new[]和delete[]去实现.
int * p_obj = new int[100];
// ...
delete [] p_obj;
在"new"运算式中使用了"[...]",就必须在"delete"运算式中使用"[]".

Q: 忘记了将"[]"用在"delete"由"new int[100]"申请的数组,会发生什么事?
A: 灾难.
new[]和delete[]正确配对是程序员的,而不是编译器的责任.堆(heap)被破坏是最可能产生的后果,更坏的可能是程序down掉.

Q: "delete this"是合法的吗?
A: 不建议这样使用. 然后这样使用是合法的,只要我们足够小心.这里的小心点有:
1)要确定"this"是由"new"申请来的(而不是new []);
2)确保完成"delete this"后,不能再去碰"this"的对象了,甚至不能碰"this"了,包括不能查看它,或是跟NULL比较.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值