Nick's answer è un buon punto di partenza, ma incompleta, come è effettivamente necessario sovraccaricare:
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
(buona pratica di codifica suggerirebbe si dovrebbe anche sovraccaricare l'eliminazione ed eliminare gli operatori [] - lo farei, ma dal momento che non stanno andando a ottenere chiamato non è davvero necessario.)
Pauldoo è anche corretto che questo non sopravvive aggregando su Foo, anche se non sopravvive che eredita da Foo. Potresti fare qualche modello di meta-programmazione magica per AIUTARE a prevenire questo, ma non sarebbe immune da "utenti malvagi" e quindi probabilmente non vale la complicazione. La documentazione su come dovrebbe essere usata, e la revisione del codice per assicurarsi che sia usata correttamente, sono l'unico modo ~ 100%.
fonte
2008-08-14 16:36:41
Perché vuoi farlo? –
Al contrario, che può anche essere interessante per i lettori: http://stackoverflow.com/questions/124880/is-it-possible-to-prevent-stack-allocation-of-an-object-and-only-allow- futuro – kevinarpe