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?
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 declaredstatic
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With