新/删除“覆盖”与“过载”

时间:2010-09-18 17:55:11

标签: c++ overloading new-operator override delete-operator

我一直以为......

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

...并且感到困惑,因为有时人们根本不关心差异。

关于新/删除:它们是否超载或被覆盖?

一个想法:

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

任何更正/建议/异议? 并随意标记“hairplitting”这个问题......

1 个答案:

答案 0 :(得分:7)

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

  

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

对于特定于班级的operator newoperator delete,运算符重载