What is difference between “new operator” and “operator new”?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
I usually try to phrase things differently to differentiate between the two a bit better, but it’s a good question in any case.
Operator new is a function that allocates raw memory — at least conceptually, it’s not much different from
malloc(). Though it’s fairly unusual unless you’re writing something like your own container, you can call operator new directly, like:It’s also possible to overload operator new either globally, or for a specific class. IIRC, the signature is:
Of course, if you overload an operator new (either global or for a class), you’ll also want/need to overload the matching operator delete as well. For what it’s worth, there’s also a separate operator new[] that’s used to allocate memory for arrays — but you’re almost certainly better off ignoring that whole mess completely.
The new operator is what you normally use to create an object from the free store:
The difference between the two is that operator new just allocates raw memory, nothing else. The new operator starts by using operator new to allocate memory, but then it invokes the constructor for the right type of object, so the result is a real live object created in that memory. If that object contains any other objects (either embedded or as base classes) those constructors as invoked as well.