为类重载operator new

时间:2011-03-23 13:48:06

标签: c++ operator-overloading new-operator

当我们重载类的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如何在幕后工作?因为重载new是OpNew类的成员而不是静态的。那么编译器如何确保对new成员函数的调用成功呢?

1 个答案:

答案 0 :(得分:33)

An operator new() or operator new[]() for a class is always a static class member, even if it is not declared with the keyword static.

C ++标准中的内容(草案n3242),在[class.free]部分中:

  

T的任何分配函数都是静态成员(即使未明确声明static)。