Wikipedia stati:È ancora possibile allocare esplicitamente C++ 0x all'operatore globale?
Un tipo può essere fatto impossibile allocare con operatore nuovo:
struct NonNewable { void *operator new(std::size_t) = delete; };
Un oggetto di questo tipo può essere solo assegnato come oggetto pila o come membro di un'altra genere. Non può essere assegnato direttamente all'heap senza trucchi non portatili. (Poiché nuova collocazione è l'unico modo per chiamare un costruttore sulla memoria utente-allocata e questo uso è stato proibito come sopra, l'oggetto non può essere costruito in modo corretto.)
eliminazione operatore nuovo è simile a renderlo privata C++ corrente, ma non utilizza esplicitamente l'operatore globale new, che evita la ricerca specifica della classe, C++ 0x ancora valido?
NonNewable *p = ::new NonNewable();
// neither non-portable nor trickery, though perhaps not widely known
Ho perso qualcosa nella bozza?
Per essere chiari, questo è valido C++ 03 e works fine:
struct NonNewable {
private:
void *operator new(std::size_t); // not defined
};
int main() {
// ignore the leaks, it's just an example
void *mem = operator new(sizeof(NonNewable));
NonNewable *p = ::new(mem) NonNewable();
p = ::new NonNewable();
return 0;
}
FYI se stai verificando: il testo citato è stato cancellato dall'articolo di Wikipedia. –