[英]Overloading operator new for a class
當我們重載類的new運算符時,我們將該函數聲明為成員函數。 例如:
class OpNew {
public:
OpNew() { cout << "OpNew::OpNew()" << endl;}
void* operator new(size_t sz) {
cout << "OpNew::new: "
<< sz << " bytes" << endl;
return ::new char[sz];
}
};
聲明OpNew *obj = new OpNew
如何在OpNew *obj = new OpNew
工作的? 因為重載new是OpNew類的成員而不是靜態的。 那么編譯器如何確保對new
成員函數的調用成功呢?
對於類的operator new()
或operator new[]()
始終是靜態類成員,即使它未使用關鍵字static聲明。
C ++標准中的內容(草案n3242),在[class.free]
部分中:
類
T
任何分配函數都是靜態成員(即使未明確聲明為static
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.