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