Ответ Ника - хорошая отправная точка, но не полная, поскольку вам действительно нужно перегрузить:
private:
void* operator new(size_t); // standard new
void* operator new(size_t, void*); // placement new
void* operator new[](size_t); // array new
void* operator new[](size_t, void*); // placement array new
(Хорошая практика кодирования предполагает, что вам также следует перегружать операторы delete и delete [] - я бы это сделал, но поскольку они не будут вызываться, это не действительно необходимо.)
Pauldoo также верно, что это не выживает, агрегируя на Foo, хотя оно выживает, наследуя от Foo. Вы могли бы сделать некоторую магию метапрограммирования шаблона, чтобы HELP предотвратил это, но он не был бы защищен от «злых пользователей» и, следовательно, вероятно, не стоит осложнений. Документация о том, как его следует использовать, и проверка кода, чтобы убедиться, что он используется должным образом, являются единственным ~ 100% способом.