Overloading operator new for a class

一笑奈何 提交于 2019-12-17 18:08:54

问题


When we overload new operator of a class, we declare the function as a member function. For eg:

class OpNew {
public:
    OpNew() { cout << "OpNew::OpNew()" << endl;}
    void* operator new(size_t sz) {
         cout << "OpNew::new: "
            << sz << " bytes" << endl;
         return ::new char[sz];
    }
};

How does the statement OpNew *obj = new OpNew work under the hood ? as overloaded new is a member of OpNew class not a static. So how does compiler ensure this call to new member function succeeds?


回答1:


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.

What the C++ standard says (draft n3242), in section [class.free]:

Any allocation function for a class T is a static member (even if not explicitly declared static).



来源:https://stackoverflow.com/questions/5406199/overloading-operator-new-for-a-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!