Вы можете легко выполнить проверку в вашем перегруженном новом операторе. Обязательно реализуйте все варианты нового оператора (как уже указывал AProgrammer).
Вызов оригинала / нового по умолчанию невозможен, но это не сложно реализовать самостоятельно. Ведь новый только выделяет память, вот и все. Поэтому вместо вызова оригинала / нового по умолчанию вы также можете вызвать malloc, HeapAlloc или любую процедуру выделения памяти, найденную в вашей системе. Обязательно вызовите соответствующий метод освобождения памяти (free, HeapFree, ...) в вашей реализации delete.
Вы не сказали, какое условие вы собираетесь проверить при внедрении нового? Если это «статическое» условие (я имею в виду: всегда давать один и тот же результат во время выполнения вашего приложения), то же самое условие также должно быть добавлено к вашей реализации delete.
Если условие зависит от ситуации и изменяется во время работы приложения, вы должны предусмотреть метод, в котором вы можете узнать, какую реализацию удаления использовать в функции удаления. Вот один из способов сделать следующее:
В вашей реализации нового:
- выделить на 8 байтов больше, чем требуется (это должно быть 8 байтов для правильного выравнивания)
- заполните первые 8 байтов идентификатором, чтобы вы могли знать, какую базовую функцию выделения памяти вы использовали
- добавить 8 байтов к выделенному указателю и вернуть этот
В вашей реализации delete:
- вычтите 8 байтов предоставленного вам указателя
- проверьте идентификацию, найденную в этом месте (см. Новую), чтобы увидеть, какую базовую реализацию удаления вы должны назвать