Nick's answer ist ein guter Ausgangspunkt, aber unvollständig, da Sie tatsächlich überlasten müssen:
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
(Gute-Codierung Praxis würde vorschlagen, Sie auch die Löschüberlasten sollten und löschen [] Operatoren - ich würde, aber da sie nicht bekommen genannt werde es nicht wirklich notwendig.)
Pauldoo ist auch richtig, dass dies nicht aggregiert auf Foo überlebt, obwohl es überleben wird von Foo erbt. Du könntest einige Template-Metaprogrammierungen machen, um dies zu verhindern, aber es wäre nicht immun gegen "böse Nutzer" und daher ist es die Komplikation wahrscheinlich nicht wert. Dokumentation wie es verwendet werden sollte, und Code-Review, um sicherzustellen, dass es richtig verwendet wird, sind die einzige ~ 100% -Methode.
Warum möchten Sie das tun? –
Die Rückseite, die auch für Leser interessant sein kann: http://stackoverflow.com/questions/124880/is-it-possible-to-prevent-stack-allocation-of-an-object-and-only-allow- es-zu-sein – kevinarpe