Nick's answer является хорошей отправной точкой, но неполно, как вы на самом деле нужно перегрузить:
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
(практика Хорошо кодирования хотел бы предложить вам также следует перегружать удаление и удаление [] операторы - я бы, но так как они не собираются, чтобы назвать это не действительно необходимо.)
Pauldoo также верно, что это не выживает агрегирование на Foo, хотя это не выжить наследуя от Foo. Вы можете сделать магию мета-программирования шаблона, чтобы ПОМОЩЬ предотвратить это, но это не будет застраховано от «злых пользователей» и, следовательно, вероятно, не стоит осложнений. Документация о том, как его использовать, и обзор кода, чтобы убедиться, что он используется правильно, - это всего лишь 100%.
Зачем вам это нужно? –
Реверс, который также может быть интересен читателям: http://stackoverflow.com/questions/124880/is-it-possible-to-prevent-stack-allocation-of-an-object-and-only-allow- это должно быть – kevinarpe