簡體   English   中英

為類重載operator new

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM