¿Puede C ++ 0x todavía asignar explícitamente con el operador global nuevo?
Wikipedia estados:
Se puede hacer imposible asignar un tipo con el operador new:
struct NonNewable {
void *operator new(std::size_t) = delete;
};
Un objeto de este tipo solo se puede asignar como objeto de pila o como miembro de otro tipo. No se puede asignar directamente al montón sin trucos no portátiles. (Dado que la colocación nueva es la única forma de llamar a un constructor en la memoria asignada por el usuario y este uso se ha prohibido como anteriormente, el objeto no se puede construir correctamente).
Eliminar el operador new es similar a hacerlo privado en C ++ actual, pero no está utilizando explícitamente el operador global new, lo 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
¿Me he perdido algo en el draft?
Para ser claros, esto es válido C ++ 03 yfunciona bien:
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;
}