Wikipedia estados:¿Puede C++ 0x todavía asignar explícitamente con operador global nuevo?
Un tipo se puede hacer imposible asignar con el operador new:
struct NonNewable { void *operator new(std::size_t) = delete; };
Un objeto de este tipo solamente siempre se puede asignar como un objeto pila o como miembro de otro tipo. No se puede asignar directamente a montones sin engaños no portátiles. (Desde la colocación de nuevo es la única manera de llamar a un constructor de la memoria asignada por el usuario y este uso ha sido prohibido que el anterior, el objeto puede no ser una buena construcción.) Operador
Eliminación de nuevo es similar a lo que es privado en C++ actual, pero no está utilizando explícitamente el operador global new, que evita la búsqueda específica de clase, ¿sigue siendo válido C++ 0x?
NonNewable *p = ::new NonNewable();
// neither non-portable nor trickery, though perhaps not widely known
¿He perdido algo en el calado?
Para ser claros, esto es válido C++ 03 y 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 si está revisando: el texto citado ha sido eliminado del artículo de Wikipedia. –