C++ allows overloading operator new
- both global and per-class - usual operator new
, operator new[]
used with new[]
statement and placement operator new
separately.
The former two of those three are usually overloaded for using customized allocators and adding tracing. But placement operator new
seems pretty straightforward - it actually does nothing inside. For example, in Visual C++ the default implementation just returns the address passed into the call:
//from new.h
inline void* operator new( size_t, void* where )
{
return where;
}
What else could it do? Why and how could I sensibly overload placement operator new
?
The correct answer is you cannot replace operator placement new.
§18.4.1.3 Placement forms
These functions are reserved, a C++ program may not define functions that displace the versions in the Standard C++ library.
The rationale: The only purpose of the allocation and deallocation operators is to allocate and deallocate memory, so when given memory nothing more should be done. (The standard specifically notes that these functions "Intentionally perform no other action.")