2012-08-31 32 views
0

我已經重載了X類型的新運營商使用一些內存池。我的new運算符沒有用戶定義的參數,因此唯一的參數是size_t類型的對象的大小。在該計劃的另一部分,我需要放置新的同類型的,像這樣:C++:放置新的衝突與自己的新的過載

new (ptr) X(); 

(其中PTR是一個指向預分配的內存位置)

看來,我的新的過載用於陰影佈局類型的新運算符。至少,編譯器會抱怨:

error: no matching function for call to ‘X::operator new(long unsigned int, X*&)’ 
note: candidate is: 
note: static void* X::operator new(size_t) 
note: candidate expects 1 argument, 2 provided 

候選者是我的新操作符的重載。我的問題是:

  • 爲什麼編譯器不能識別我想使用放置新?
  • 無論如何,我該如何使用它?
  • WTF是錯誤信息中顯示的類型X*&
+0

X *&是對X *的引用。通過參數返回X *。 http://codepad.org/7vu3r04b –

回答

2

覆蓋TypeName :: operator new(size_t)要求您也覆蓋放置new操作符(相反不是必需的)。這就是編譯器抱怨的原因。 (有道理 - 如果你在分配過程中做了一些奇怪的事情,你可能想在位置new操作符的指定位置執行該操作,反之不一定是這樣)。 而X * &僅僅是您想要新對象的指針的引用。

+1

但爲什麼引用指針而不是指針本身? – gexicide

+0

@gexicide:因爲參數是一個左值,它的類型將被推斷爲引用。 – Grizzly

+0

你能否提供一個理由/爲什麼會出現這種情況? –