5

我一直以为...

  • 覆盖意味着在基类中重新实现一个函数(相同的签名),而
  • 重载意味着实现同名但不同签名的函数

...并感到困惑,因为有时人们只是不关心差异。

关于新/删除:它们是重载还是被覆盖?

一个想法:

  • 在 Class = 重载中实现 new/delete 运算符
  • 重新实现全局 new/delete = override

有任何更正/建议/反对意见吗?并随时标记问题“头发分裂”......

4

1 回答 1

7

对于全局operator newand operator delete,它实际上既不是重载也不是覆盖。允许程序用它自己的定义替换默认的、实现提供的定义。C++ 标准说(§3.7.3/2):

该库为全局分配和释放函数提供默认定义。一些全局分配和释放函数是可替换的 (18.4.1)。C++ 程序应最多提供一个可替换分配或解除分配函数的定义。任何此类函数定义都会替换库 (17.4.3.4) 中提供的默认版本。

对于特定于类的operator newor operator delete,运算符被重载

于 2010-09-18T17:59:13.727 回答