与带有free
(How does free know how much to free?)的C相比,我不明白为什么某些operator delete
重载需要一个额外的size_t
参数。
例如,这是 C ++ Primer 5th 中提到的一个:
(我也不明白在这里使用size_t
的目的)
当运算符
delete
或operator delete[]
被定义为类成员时,该函数可能具有类型size_t
的第二个参数。如果存在,则用第一个参数寻址的对象的字节大小初始化附加参数。当我们删除属于继承层次结构的对象时,将使用size_t
参数。如果基类具有虚拟析构函数(第15.7.1节,第622页),则传递给运算符delete的大小将根据删除的指针所指向的对象的动态类型而变化。此外,运行的operator delete
函数的版本将是对象动态类型的版本。
当调用delete pointer_to_object
时,我知道编译器:
operator delete or delete[]
释放内存和IIRC,operator delete
由free
实现。再说一遍,为什么size_t
不需要operator delete
的{{1}}参数呢?