Предположим, мне нужно перегрузить глобальный ::operator new() для хранения дополнительных данных с каждым выделенным объектом. Таким образом, в основном это будет работать следующим образом:
- для каждого вызова глобального
::operator new()он примет переданный размер объекта и добавит размер дополнительных данных - он выделит блок памяти размера, выведенный на предыдущем шаге
- он будет смещать указатель на часть блока, не занятую дополнительными данными, и вернуть это значение смещения вызывающему абоненту
::operator delete() сделает то же самое в обратном направлении - сдвиг указателя, доступ к дополнительным данным, освобождение памяти.
Теперь вопрос в том, как распределить память? Конечно, я могу назвать malloc() или какую-то определенную платформой функцию (как это обычно делается). Но обычно, когда мне нужно выделить необработанную память в С++, я вызываю ::operator new(). Могу ли я вызвать исходный ::operator new() для выделения памяти из моего перегруженного глобального ::operator new()?