Nick's answer es un buen punto de partida, pero incompleto, ya que en realidad necesita sobrecargar:
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
(Buenas prácticas de codificación sugeriría también se debe sobrecargar el borrado y eliminar los operadores [] - Me gustaría, pero ya que no van a ser llamado no es realmente necesario.)
Pauldoo también es cierto que este no sobrevive en la agregación de Foo, aunque sobrevive heredando de Foo. Podrías hacer un poco de magia de meta-programación de plantillas para AYUDAR a prevenir esto, pero no sería inmune a los "usuarios malvados" y probablemente no valga la pena la complicación. La documentación de cómo se debe usar y la revisión del código para garantizar que se usa correctamente son las únicas ~ 100% de la ruta.
¿Por qué querrías hacer esto? –
Lo contrario, que también puede ser interesante para los lectores: http://stackoverflow.com/questions/124880/is-it-possible-to-prevent-stack-allocation-of-an-object-and-only-allow- it-to-be – kevinarpe