我從來沒有完全理解運算符重載的參數列表是如何以系統的方式確定的,而且我對現在的問題特別困惑。運算符重載(特別是'new')參數如何工作?
當你重載一元運算符時,它有一個參數,或者如果它是一個類成員,則爲零。當你重載一個二元運算符時,它有兩個參數,或者一個是類成員。至少這是它看起來工作的方式。但是,我遇到了operator new
(不是班級成員)的問題。
在一個代碼庫,我的工作中,在其他地方,我在過去已經看到(如here例如)有一個這樣定義#define new new(__FILE__, __LINE__)
,並簽名void *new(size_t size, const char *file, unsigned line)
或類似的東西了內存調試相應的功能。我注意到,我的項目中的那個與以前鏈接的不一樣。這對我來說存在一個問題,因爲出於某種原因,它正在搞亂新的放置。我查看了C++編程語言,如果它解釋了這一點,我很想念它。
new
是否在這方面是特殊的,即它是否有特定的語言定義額外的調試簽名?它看起來不像是因爲,正如我上面提到的,我在不同的地方看到了略有不同的簽名。如果是這樣,其他運營商有什麼不明顯的簽名,它們是什麼?這些不同的簽名而不是某些實現特定的額外功能?如果是這樣,那麼對於大多數實現有什麼一般規則嗎?或者,這是否像我在我的標題中暗示的一樣?你可以在簽名中加入任意數量的額外參數嗎?如果你使用new
關鍵字本身和你想要的新類型之間的參數來調用new,你可以做任何事情?還是我更加困惑,還有什麼我失蹤?
最重要的是在短期內(雖然我真的很想明白這一點),發生什麼事情弄亂了我的位置new
?該宏正在導致類似new ("file.cpp", 100) (class_pointer) class_t
的擴展。括號內的兩個問題可能是問題還是其他問題?