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