2010-09-18 75 views
5

我一直以爲...新/刪除「覆蓋」與「超載」

  • 覆蓋手段在基類中重新實現的函數(相同的簽名),而
  • 超載意味着實施具有相同名稱但具有不同簽名的功能

......並且感到困惑,因爲有時候人們根本不在乎差異。

關於新建/刪除:它們是否被重載或覆蓋?

一個想法:在Class =超載

  • 重新實現全球新/刪除=覆蓋
  • 任何更正/建議/反對

    • 實施新/刪除操作? 並隨時標記問題「hairsplitting」...

    回答

    7

    對於全球operator newoperator delete,它實際上既不是重載也不是重寫。程序被允許以替換默認的,實現提供的定義和它自己的定義。 C++標準規定(§3.7.3/ 2):

    該庫爲全局分配和釋放函數提供了默認定義。一些全球分配和釋放功能是可替換的(18.4.1)。 C++程序至多應提供一個可替換分配或釋放函數的定義。任何這樣的函數定義都會替換庫中提供的默認版本(17.4.3.4)。

    對於一類特定的operator newoperator delete,所述運營商正在重載

    +0

    因此,重載和重載在這裏同樣是錯誤的,這就解釋了在使用中的50-50分佈:-) – 2010-09-18 18:02:58

    +0

    James:雖然我認爲你寫的是正確的,但你仍然可以將全局運算符與其他運算符)參數。事實上,std lib至少帶有重載:一個放置new和'nothrow'變體。 – sbi 2010-09-18 20:14:58

    +1

    @sbi:對。那麼,全球運營商是超負荷的,每個重載可以被取代。 @ spc-mrn:是的,有效。 – 2010-09-18 20:38:57