Как мне вызвать исходный «оператор new», если я его перегрузил?

Предположим, мне нужно перегрузить глобальный :: operator new () для хранения дополнительных данных с каждым выделенным объектом . Таким образом, в основном это будет работать следующим образом:

  • для каждого вызова global :: operator new () он будет принимать размер переданного объекта и добавлять размер дополнительных данных
  • , он будет выделить блок памяти размера, определенного на предыдущем шаге
  • , он сместит указатель на часть блока, не занятую дополнительными данными, и вернет это значение смещения вызывающей стороне

:: operator delete () сделает то же самое в обратном порядке - сдвинет указатель, получит доступ к дополнительным данным, освободит память.

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

29
задан Community 23 May 2017 в 10:28
поделиться