解析C++中的new、operator new、operator new[]和delete、operator delete、operator delete[](上)

注:以下测试均在VS2015下进行,其他编译器可能会有轻微差别。

由于内容会比较多,所以拆成上下两篇来写。

最近在为一个Base项目做需求,在Base代码中看到了大量的重载operator new/delete的轮子代码,而这方面之前并没有过多去关注,于是花时间仔细查了查资料,写了写Demo的代码,总算是对C++中new/delete这一家族的成员有了个了解。

送的来看,关于new和delete可以分成两大组:

一、 new/delete以及其对应的数组版本new[]/delete[]。

二、 所谓的operator new/delete(其中包含一个叫做placement operator new,它其实是C++中已经提供好的一个operator重载版本),以及其对应的数组版本new[]/delete[]。

下面我们一一来看。

一、 new/delete以及对应的数组版本new[]/delete[]。

这两组可以看作是一家的,也是我们在C++中最先接触到的,它们是C++中预先定义好的,我们不可以对它们进行重载,它们的用法就是申请和释放堆内存,例如:

COperatorTest* pOp2_1 = new COperatorTest();
//other stuff
delete pOp2_1;

这里,new/delete其实分别做了两件事情:

对于new:1. 申请内存(通过operator new),大小为sizeof(COperatorTest)。2. 调用COperatorTest构造函数(回个怒传参情况调用不同版本的构造函数)。

对于delete:1. 调用COperatorTest析构函数。2. 释放内存(通过operator delete)。

COperatorTest* pOpArr =
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值