When an object of a class type is created with the new operator, the member operator new() function is implicitly called. The first argument is the amount of space requested.
The following rules determine which storage allocation function is used:
When a nonclass object is created with the new operator, the global ::operator new() is used.
The order of evaluation of a call to an operator new() is undefined in the evaluation of arguments to constructors. If operator new() returns 0, the arguments to a constructor may or may not have been evaluated.