Если вы компилируете (посредством включения заголовка) переопределенные операторы new / delete, то все вызовы в вашем коде для new / delete будут использовать их. Нет способа переопределить его (ошибки ссылки) или только частично переопределить его и т. Д.
Плохо переопределять глобальные операторы new / delete. Это плохая идея. Если вы не понимаете, почему это плохая идея, вы не можете это сделать. Если вы понимаете, почему это плохая идея, вы можете это сделать, но в целом вы решите не делать этого.
Определение глобального new / delete экспоненциально больше зла в компоненте, который, как вы ожидаете, люди будут включать непосредственно в свой проект. Ваша работа как клиента заключается в том, чтобы помочь продавцу, понимающему серьезность ситуации, или перестать быть его клиентом.
Вы можете определить пользовательский тип распределителя (см. Ссылку для хорошего учебника о том, как это сделать, необходимый интерфейс и т. Д.) И использовать его исключительно с вашими типами STL (это аргумент шаблона). ,
Для shared_ptr вам нужно сделать что-то немного другое: он принимает объект-конструктор в качестве параметра для конструктора, если вам не нужно поведение по умолчанию "delete p". Это не пользовательский распределитель; это обычный унарный функтор.