解析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 =

你可能感兴趣的:(C++,C++,new,delete,operator)