С++ позволяет перегружать operator new - как глобальный, так и для каждого класса - обычный operator new, operator new[], используемый с оператором new[] и размещением operator new отдельно.
Первые два из этих трех обычно перегружены для использования настраиваемых распределителей и добавления трассировки. Но размещение operator new кажется довольно простым - оно фактически ничего не делает внутри. Например, в Visual С++ реализация по умолчанию просто возвращает адрес, переданный в вызов:
//from new.h
inline void* operator new( size_t, void* where )
{
return where;
}
Что еще можно было сделать? Почему и как я мог разумно перегрузить размещение operator new?