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