为什么操作员删除需要size_t参数?

时间:2018-09-24 04:44:55

标签: c++

与带有freeHow does free know how much to free?)的C相比,我不明白为什么某些operator delete重载需要一个额外的size_t参数。

例如,这是 C ++ Primer 5th 中提到的一个:
(我也不明白在这里使用size_t的目的)

  

当运算符deleteoperator delete[]被定义为类成员时,该函数可能具有类型size_t的第二个参数。如果存在,则用第一个参数寻址的对象的字节大小初始化附加参数。当我们删除属于继承层次结构的对象时,将使用size_t参数。如果基类具有虚拟析构函数(第15.7.1节,第622页),则传递给运算符delete的大小将根据删除的指针所指向的对象的动态类型而变化。此外,运行的operator delete函数的版本将是对象动态类型的版本。


当调用delete pointer_to_object时,我知道编译器:

  • 调用对象析构函数
  • 调用operator delete or delete[]释放内存

和IIRC,operator deletefree实现。再说一遍,为什么size_t不需要operator delete的{​​{1}}参数呢?

0 个答案:

没有答案